【问题标题】:User based authorization in Asp.Net MVCAsp.Net MVC 中基于用户的授权
【发布时间】:2017-07-11 11:07:50
【问题描述】:

我需要进行基于用户的授权,而不是基于角色的授权。例如,我的项目中有 10 个模块,当我添加用户时,我可以授予用户权限,他们可以访问所有模块。我可以看到基于角色授权的教程。有什么基于用户的授权吗?

【问题讨论】:

    标签: asp.net-mvc authorization


    【解决方案1】:

    如果我正确理解了您的问题,那就很简单了

    AuthorizeAttribute.Users Property

    获取或设置有权访问控制器或操作方法的用户。

    例子:

    [Authorize(Users="Alice,Bob")]
    public class RestrictedContentController : Controller
    {
        . . .
    }
    

    【讨论】:

    • 感谢您的回复。我们如何在 [Authorize] 属性中动态分配用户。如果我要添加新用户,他/她必须使用我的控制器。那该怎么办?
    • 我很高兴,而且简单的事情是,如果您深入地看到用户接受用逗号分隔的字符串,那么您可以将新添加的用户分配给任何字符串变量并将其提供给 users 属性。就是这样。如果您想允许所有新添加的用户,那么只需使用 [Authorize] 属性。谢谢
    【解决方案2】:

    开箱即用并没有明确的用途,但有了其他一切,你可以做你想做的事。

    如果您有类似这样的业务逻辑或数据库概念:

    表模块(Id、名称、ModuleCodeName 等...) 表用户(ID、名称等...) 表 UserAllowedTouseModule(UserId、ModuleId、CreatedOn、ValidFromDateTime、ValidToDateTime 等...

    几种方法:

    每个控制器/区域,实现或使用一个抽象的 baseController 类,并使用一个接收 ModuleCodeName 的构造函数(值可以来自字符串、枚举等......)。 然后你有一个验证或以下类型:

    • 由于用户已通过身份验证,因此您知道其 Id,并且您可以访问数据库以验证他是否有权访问该模块(基于收到的 ModuleCodeName),如果没有,则将其重定向到其他地方。
    • 可以通过缓存值进行验证(而不是一直访问数据库)。
    • 或者您也可以将这些值添加到在登录时创建的自定义身份验证属性中。
    • 等等。我想你明白了。

      对于这种类似的逻辑,请查看以下问题/答案: MVC - Redirect inside the Constructor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 2013-07-24
      • 1970-01-01
      • 2012-05-14
      相关资源
      最近更新 更多