【问题标题】:Role Management in ASP MVC 5 (Microsoft.AspNet.Identity)ASP MVC 5 (Microsoft.AspNet.Identity) 中的角色管理
【发布时间】:2013-10-06 15:23:10
【问题描述】:

在 ASP MVC5 RC 中,我没有让角色系统工作。 我的数据库有一个角色存在的所有需求表,但如果用户在角色中进行校对总是返回 false(没有 SQL 异常或其他东西)!?

我需要在某处为IPrincipal 激活角色系统吗?

测试代码:

AccountController accCont = new AccountController();

// check role exist : result = true
var roleExist = await accCont.IdentityManager.Roles.RoleExistsAsync("61c84919-72e2-4114-9520-83a3e5f09de1");

// try find role by name : result = role object
var role = await accCont.IdentityManager.Roles.FindRoleByNameAsync("ProjectAdministrator");

// check with AccountController instance :  result = true
var exist = await accCont.IdentityManager.Roles.IsUserInRoleAsync(User.Identity.GetUserId(), role.Id);

// check if current user is in role : result (both) = false????
var inRole = User.IsInRole(role.Id);
var inRole2 = User.IsInRole(role.Name);

我还尝试从 Microsoft.AspNet.Identity.Owin 命名空间构建自定义扩展,例如 IIdentity.GetUserId() 扩展方法。

namespace Microsoft.AspNet.Identity
{
   public static class IdentityExtensions
   {
       public static string IsUserInRole(this IIdentity identity)
       {
           if (identity == null)
           {
               throw new ArgumentNullException("identity");
           }
           ClaimsIdentity identity2 = identity as ClaimsIdentity;
           if (identity2 != null)
           {
               var result = identity2.FindFirstValue(IdentityConfig.Settings.GetAuthenticationOptions().RoleClaimType);

               return null; // later result
           }
           return null;
       }
   }
}

但声明类型RoleClaimType 的结果始终为null :( 我真的很纠结这个。

感谢您的帮助!史蒂芬

【问题讨论】:

  • 你试过 User.IsInRole("string role name") 吗?
  • 或者你可以试试:string[] userroles = Roles.GetRolesForUser("username") - 这应该返回一个用户角色数组,你可以循环确定它是否包含特定角色。跨度>

标签: c# asp.net asp.net-mvc-5 asp.net-identity


【解决方案1】:

我正在尝试自己了解如何在 MVC 5 中使用角色,这就是我来到这里的原因。我无法回答您的问题,但请查看此链接。下载的解决方案开箱即用,我已经能够剪切和粘贴一些代码并让它在我自己的应用程序中运行。现在我正试图完全理解它在做什么。

http://www.typecastexception.com/post/2013/11/11/Extending-Identity-Accounts-and-Implementing-Role-Based-Authentication-in-ASPNET-MVC-5.aspx

它可能无法回答您的问题,但至少它是一个完全有效的解决方案,实际上可以按照描述的那样工作,没有太多麻烦,所以这是一个很好的起点。

【讨论】:

    【解决方案2】:

    User.IsInRole 基本上是在查看当前登录用户的声明。您的登录逻辑是什么样的?这就是负责铸造变成用户身份的 cookie 的原因。这需要正确设置 Role 声明,IsInRole 方法才能正常工作。

    【讨论】:

    • 我也需要这个!!
    • @JeremyCook 你得到解决方案了吗?我已经实现了一个自定义用户存储,而不是使用默认实体框架之一。执行 [Authorize(Roles = "Admin")] 时,不会调用与角色相关的方法
    • 我确实找到了问题的根源并发布了答案here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多