【问题标题】:AuthorizeAttribute. Grant access to some action in controller for different role授权属性。为不同角色授予对控制器中某些操作的访问权限
【发布时间】:2018-06-29 03:57:31
【问题描述】:

我的应用程序中有两个角色:AdminContentMaker。管理员拥有完全访问权限,ContentMaker 可以创建\编辑文章。一个用户有一个角色(一对一)。 虽然我只有一个AdminController 用于所有用 AuthorizeAttribute 装饰的东西(包括管理文章)。我只想授予在 AdminController 中编辑 ContentMaker 的文章的权限。问题是 contentmaker 不是管理员,所以他根本无法访问 AdminController。是否可以扩展 AuthorizeAttribute 以允许这种行为?这就是我想要的:

//only Admin can access this controller
[Authorize(Roles = ConstantsWeb.Database.AdminRoleName)]
public partial class AdminController : Controller
{
    //ContentMaker has no access here
    public ActionResult SomeAdminStuffAction()
    {
        //code
    }

    //ContentMaker only has access here, although he is not Admin
    [Authorize(Roles = ConstantsWeb.Database.ContentMakerRoleName)]
    public ActionResult EditArticle(int id)
    {
        //code
    }
}

【问题讨论】:

    标签: asp.net-mvc authorization


    【解决方案1】:

    这很容易解决。由于此处的 ASP.NET MVC 5 是 OverrideAuthorization 属性。它允许覆盖控制器中任何操作的访问权限。您需要放置OverrideAuthorization 属性和另一个Authorize 属性。像这样:

    //only Admin can access this controller
    [Authorize(Roles = ConstantsWeb.Database.AdminRoleName)]
    public partial class AdminController : Controller
    {
        //ContentMaker has no access here
        public ActionResult SomeAdminStuffAction()
        {
            //code
        }
    
        //ContentMaker only has access here, although he is not Admin
        [OverrideAuthorization]
        [Authorize(Roles = ConstantsWeb.Database.AdminRoleName + "," + ConstantsWeb.Database.ContentMakerRoleName)]
        public ActionResult EditArticle(int id)
        {
            //code
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2019-05-16
      • 2021-05-12
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      相关资源
      最近更新 更多