Roles.IsUserInRole(“Admin”)如何工作?

时间:2013-02-19 08:01:43

标签: asp.net-mvc asp.net-mvc-3 razor asp.net-membership

我试图隐藏并根据登录的用户角色显示菜单栏。所以我在razor视图中编写了一个代码

   @if ( Request.IsAuthenticated && HttpContext.Current.User.IsInRole( "Admin" ) ) {
                 <li>Projects link</li>
                 <li>Profile link</li>
            }

还有这个

 @if (Roles.IsUserInRole( "Admin" ) ) {
                 <li>Projects link</li>
                 <li>Profile link</li>
            }

我已尝试过这两个代码,但它有效,但问题是它不适用于所有管理员。当共有4个用户拥有管理员角色时,它仅为一个管理员工作。

当我宣布另一个用户角色财务管理员为单个用户工作时,同样如此!

所有其他用户阻止菜单,但四个用户的用户角色相同。我不知道当剩下三个同样的角色时,它只有一个用户作为管理员。 任何人都可以解释从数据库获取角色的方法及其工作原理吗?

2 个答案:

答案 0 :(得分:0)

IsInRole方法(以及所有其他方法)是数据库中的存储过程。在您的数据库中,您有MemberShip表。存储过程适用于这些表。如果你说代码适用于一个连接了管理员角色的用户,那么我要检查的第一件事是,如果其他用户不能使用它将真正拥有该角色。检查表中数据库中的所有用户和角色连接。

答案 1 :(得分:0)

检查数据库中的webpages_UsersInRoles表,因为这是管理哪些角色附加到哪些用户配置文件的原因。

在创建用户时,可能还存在分配角色的问题。检查帐户控制器上的注册方法。你应该有这样的一行:

Roles.AddUserToRole(model.UserName, model.userRole);

如果没有,则在创建用户时可能不会分配角色。