爲了讓用戶和網站管理員對我的申請,我決定這條航線上查看/添加/編輯/刪除數據:減少重複的代碼在控制器動作
routes.MapRoute("ClientRoute",
"{account}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" });
導致路線,如:mvcapp.net/ 1234 /接觸/添加。
爲了讓用戶{管理員除外}訪問其他客戶端的數據,我在控制器操作中添加了以下代碼。
...
var model = repos.GetSomeData();
if (User.IsInRole("Admin") == false) {
if (account == Profile["Client"])
return View(model);
else
return View("WrongClient");
}
...
這樣做的最好方法是什麼?
解我
public class BaseController : Controller {
protected override OnActionExecuting(ActionExecutingContect filterContext) {
if (filterContext.RouteData.Values["account"] != null) {
string client = filterContext.RouteData.Values["account"].ToString();
if (User.IsInRole("admin") == false) {
if (Profile.Clients.Contains(account) == false)
filterContext.Result = new ViewResult() {ViewName = "WrongClient"};
}
}
}
}
HttpContext.Profile – 2009-11-09 19:48:59
在這種情況下,我建議只檢查「客戶端」是否與用戶的id相匹配(假設您使用clientid作爲User.Identity.Name) – Omar 2009-11-09 23:03:08
Paul Balmire的回覆(第5或第6條)讓我知道解決方案我選擇。 – 2009-11-11 19:30:24