我在我的项目中使用 mvc4,使用 SimpleMembership 角色提供者。我需要在我的项目中实现基于任务的访问。我的 ActionResult([HttpPost]) 由 Create、Get、Update 和 Delete 方法组成。我实现了自定义 Authorize 类,它是......
public class AuthorizeUserAttribute : AuthorizeAttribute
{
// Custom property
public string AccessLevel { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
string privilegeLevels = string.Join("", objManager.GetPermissions()); // Call another method to get rights of the user from DB(view,delete,update,create)
if (privilegeLevels.Contains(this.AccessLevel))
{
return true;
}
else
{
return false;
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
//some code for redirect to request page and showing alert("you don't have permission to do this action") through Response.
}
}
我不能在每个 ActionResult 上使用 [AuthorizeUser(AccessLevel="Get or Delete or View or Create")]。因为我在一个 ActionResult(调用创建、更新、删除和查看方法)中实现了总视图、创建、更新和删除功能。
我的问题是当我为 Get 方法提供 [AuthorizeUser(AccessLevel="Get")] 时,为 Create 方法提供 [AuthorizeUser(AccessLevel="Create")] 等等......在控制进入 ActionResult() 之后它是首先检查[AuthorizeUser(AccessLevel="some access level")],一旦是Authorize,就不会检查其他方法[AuthorizeUser]。
在 ActionResult() 上尝试 [AuthorizeUser] 之后,我得出结论,只有每个页面请求它正在检查授权(不是第二次),有没有办法调用 [AuthorizeUser(AccessLevel="some access level")]在单个页面请求中不止一次。
提前致谢...