0

我在我的项目中使用 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")]在单个页面请求中不止一次。

提前致谢...

4

0 回答 0