我正在開發一個MVC4網站。我開發了用戶角色和權限。在操作篩選器或Authroize篩選器上驗證用戶權限?
我想問我應該在哪裏檢查用戶權限訪問權限:在自定義操作過濾器還是自定義授權過濾器中?
如果用戶無法訪問模塊,則必須顯示烤麪包機錯誤消息。如何在動作過濾器中顯示此消息?
我正在開發一個MVC4網站。我開發了用戶角色和權限。在操作篩選器或Authroize篩選器上驗證用戶權限?
我想問我應該在哪裏檢查用戶權限訪問權限:在自定義操作過濾器還是自定義授權過濾器中?
如果用戶無法訪問模塊,則必須顯示烤麪包機錯誤消息。如何在動作過濾器中顯示此消息?
我用來編寫自定義操作過濾器屬性,以便在動作調用時調用此方法,如果用戶角色允許他調用此操作,則檢查它。
你必須編寫自定義操作過濾器屬性相同的方式,但你必須寫在CheckAccessRight方法自己的業務邏輯:
public class AuthorizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string actionName = filterContext.ActionDescriptor.ActionName;
string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
if (!CheckAccessRight(actionName, controllerName))
{
string redirectUrl = string.Format("?returnUrl={0}", filterContext.HttpContext.Request.Url.PathAndQuery);
filterContext.HttpContext.Response.Redirect(FormsAuthentication.LoginUrl + redirectUrl, true);
}
else
{
base.OnActionExecuting(filterContext);
}
}
private bool CheckAccessRight(string Action, string Controller)
{
if (HttpContext.Current.Session["userId"] != null)
{
string userID = HttpContext.Current.Session["userId"].ToString();
using (var db = new cloud_clinicEntities())
{
assignment objAss = null;
if (HttpContext.Current.Session["AccountType"].ToString() == "lab")
{
objAss = db.assignments.SingleOrDefault(model => model.userid == userID);
}
else
{
objAss = db.assignments.SingleOrDefault(model => model.employeeId == userID);
}
String UserRole = objAss.itemname;
itemchildren objChild = db.itemchildrens.SingleOrDefault(model => model.parent == UserRole && model.child == Controller + " " + Action);
if (objChild != null)
{
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
}
,然後在行動像這樣使用這個屬性:
[AuthorizationAttribute]
public ActionResult MyAction()
{
}
Here's一篇好文章。您可以爲管理員等多個角色設置自己的屬性。
使用授權屬性 - http://stackoverflow.com/questions/2504923/how-to-redirect-authorize-to-loginurl-only-when-roles-are-not-used。讓我知道它是否有幫助。 – ramiramilu