【问题标题】:Roles.GetRolesForUser() & Roles.GetAllRoles() returns emptyRoles.GetRolesForUser() & Roles.GetAllRoles() 返回空
【发布时间】:2017-04-11 04:05:10
【问题描述】:

web.config

<roleManager enabled="true" defaultProvider="SqlRoleManager">
  <providers>
    <clear />
    <add name="SqlRoleManager"
         type="System.Web.Security.SqlRoleProvider"
         connectionStringName="DefaultConnection"
         />
  </providers>
</roleManager>

在 asp.net mvc 5 中,我正在尝试检测当前用户的角色,以便我可以将他重定向到特定于其角色的页面,但是

在我的控制器中

if (Roles.IsUserInRole(User.Identity.GetUserName(), "superadmin")

if (Roles.IsUserInRole(User.Identity.Name, "superadmin")

两者都不正确,我确定我已登录,因为 User.Identity.GetUserName() 正在显示我的登录信息

尝试调试,发现Roles.GetRolesForUser()是空的,查了网上资源还是没有解决办法

进一步调试显示Roles.GetAllRoles()也是空的,但我的AspNetRoles表有5条记录。

我查看了 AspNetUserRoles,发现我当前的用户 ID 已分配给特定角色 ID

我已经成功运行 aspnet_regsql.exe 来添加所有功能,但仍然无法获得角色

我认为aspnet_regsql.exe 用于网络表单(我不确定)

【问题讨论】:

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


    【解决方案1】:

    我正在使用手机,因此无法仔细检查,但我确信 IsUserInRole() 将接受像 IsUserInRole("superadmin") 这样的单个参数来检查会话中的当前用户。我会删除用户名部分,因为您正在检查当前用户而不是其他命名用户。它更快,并且至少会检查和消除逻辑的一部分。

    你是如何播种角色的?

    【讨论】:

      猜你喜欢
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2018-12-23
      • 2014-03-05
      • 1970-01-01
      • 2021-07-07
      • 2013-09-30
      • 2021-08-23
      相关资源
      最近更新 更多