1

我已经成功创建了一个简单的 MVC 6 应用程序,它使用我自己的 ApplicationUser、ApplicationUserStore(实现 IUserStore 和 IUserPasswordStore)和 ApplicationUserManager(扩展 UserManager)。登录现在可以完美运行。现在我确实想扩展我的项目以支持我的控制器中的注释,如下所示:

[Authorize(Roles = "TestRole")]
public IActionResult Trips()
{
  ...
}

因此,我还创建了自己的 ApplicationRole、ApplicationRoleManager、ApplicationRoleStore 并将它们注册到我的 Startup 中:

    services.AddIdentity<ApplicationUser, ApplicationRole>(config =>
    {
        config.User.RequireUniqueEmail = true;
        config.Password.RequiredLength = 8;
        config.Cookies.ApplicationCookie.LoginPath = "/Auth/Login";
        config.Cookies.ApplicationCookie.AutomaticAuthenticate = true;
    }).AddUserStore<ApplicationUserStore<ApplicationUser>>()
    .AddRoleStore<ApplicationRoleStore<ApplicationRole>>()
    .AddUserManager<ApplicationUserManager>()
    .AddRoleManager<ApplicationRoleManager>(); 

我现在的问题是注释根本不起作用。实际上,我希望我的 ApplicationRoleStore 中的 Roles 方法(来自 IQueryableRoleStore)会被触发。

我是否错过了我绑定的某个地方,或者我对身份/角色概念有完全错误的想法?

4

1 回答 1

2

授权属性:

[Authorize(Roles = "TestRole")]
public IActionResult Trips()
{
  ...
}

不会调用任何身份的东西。它只会检查当前用户是否在角色“TestRole”中,并且仅在用户在角色中时才允许访问。这将是对角色 cookie 的检查。

您仍然需要构建自己的 UI 来管理角色成员资格,添加从角色中删除的用户,以便将该角色放入用户的 cookie。

如果您需要更多想法,我在这里有一个项目,该项目实施了角色管理以及没有实体框架的身份

于 2015-12-09T15:57:05.880 回答