【问题标题】:Is RoleProvider needed to use [Authorize(Roles = "Admin")]?RoleProvider 是否需要使用 [Authorize(Roles = "Admin")]?
【发布时间】:2013-09-06 01:33:00
【问题描述】:

我想在我的 ASP.net MVC 控制器操作中使用 [Authorize(Roles = "Admin")] 属性。我是否需要配置角色提供程序(开箱即用或自定义)才能执行此操作?如果我这样做,并且我想使用自定义角色提供程序,必须实现哪些方法才能使用 AuthorizeAttribute?

非常感谢。

【问题讨论】:

    标签: asp.net asp.net-membership roleprovider


    【解决方案1】:

    是的,您需要角色提供者才能使用[Authorize(Roles = "Admin")]

    看看使用实体框架代码优先的新ASP.NET Universal Providers

    (注意:aspnet_regsql.exe 生成的旧的 ASP.Net Membership Provider 使用 schema 和 store 过程。我不建议使用它。)

    如果要实现Custom Role Provider,至少需要重写以下方法(其他方法可选) -

    public override string[] GetRolesForUser(string username)
    

    更新评论

    如果我必须使用 MembershipProvider 或者我可以侥幸逃脱 使用 RoleProvider 在我的 [Authorize(Roles = "Admin")] 控制器动作

    通常,如果您想使用 RoleProvider,则需要使用 MembershipProvider。否则,您将需要创建 IPrincipal 对象并将用户的授权角色添加到该对象。

    根据这个post,你不能用Universal自定义[地图] 提供者。

    最初的问题是关于重命名您不能做的成员资格表(除非您创建自定义成员资格提供程序和自定义角色提供程序)。但是,您可以在表和成员表之间创建关系。此外,您可以在存储过程中包含成员资格表。

    【讨论】:

    • 感谢您明确而直接的回答。您提到了使用 Entity Framework 的 ASP.net 通用提供程序,到目前为止我还没有什么经验。我可以将实体类映射到我自己的过程和表(我理解这是 EF 的特性/优点之一)吗?
    • 实际上,您无需了解实体框架即可使用通用提供程序——它们就在幕后。 您可以映射到您的存储过程和表,只要您不更改它们的表,例如向用户表添加额外的列(这是 NO NO)。
    • 谢谢,但如果我想映射我的表和过程,我不需要知道 EF 吗?如果不在 EF 中,我还能如何进行映射?
    • 另外,你知道我是否必须使用 MembershipProvider 还是只使用 RoleProvider 来在我的控制器操作中使用 [Authorize(Roles = "Admin")]
    • 根据this post,您无法使用Universal Providers自定义[地图]。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多