我试图隐藏并根据登录的用户角色显示菜单栏。所以我在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个用户拥有管理员角色时,它仅为一个管理员工作。
当我宣布另一个用户角色财务管理员为单个用户工作时,同样如此!
所有其他用户阻止菜单,但四个用户的用户角色相同。我不知道当剩下三个同样的角色时,它只有一个用户作为管理员。 任何人都可以解释从数据库获取角色的方法及其工作原理吗?
答案 0 :(得分:0)
IsInRole方法(以及所有其他方法)是数据库中的存储过程。在您的数据库中,您有MemberShip表。存储过程适用于这些表。如果你说代码适用于一个连接了管理员角色的用户,那么我要检查的第一件事是,如果其他用户不能使用它将真正拥有该角色。检查表中数据库中的所有用户和角色连接。
答案 1 :(得分:0)
检查数据库中的webpages_UsersInRoles
表,因为这是管理哪些角色附加到哪些用户配置文件的原因。
在创建用户时,可能还存在分配角色的问题。检查帐户控制器上的注册方法。你应该有这样的一行:
Roles.AddUserToRole(model.UserName, model.userRole);
如果没有,则在创建用户时可能不会分配角色。