如何检查当前用户的角色

10

如何在C#中检查当前用户的角色并将其打印到屏幕上。

谢谢!

7个回答

16

你可以使用Roles.GetRolesForUser()方法获取用户所属的所有角色。像这样使用:

string[] rolesuserbelongto = Roles.GetRolesForUser();

你将会得到一个字符串数组,其中包含所有角色。

你甚至可以传递一个用户名作为参数,像这样获取特定用户的角色:

string[] rolesuserbelongto = Roles.GetRolesForUser("Shekhar_Pro");

为了拥有“Roles”类,必须添加哪个命名空间? - Ixtlan
@Ixtlan - 使用 System.Web.Security; - Avital

7
最常用的方法是获取一个IPrinciple,然后在其上调用IsInRole()。如何获取Principle取决于您的运行时环境。此示例适用于在用户帐户下运行的应用程序。
示例:
    static void PrintIsInAdministrators()
    {
        // There are many ways to get a principle... this is one.
        System.Security.Principal.IPrincipal principle = System.Threading.Thread.CurrentPrincipal;
        bool isInRole = principle.IsInRole("MyDomain\\MyRole");
        Console.WriteLine("I {0} an Admin", isInRole ? "am" : "am not");
    }

1

Roles.GetRolesForUser(); 给我报错:The Role Manager feature has not been enabled

如果你使用的是 ASP.NET Identity UserManager,可以通过以下方式获取它:

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>();

var roles = userManager.GetRoles(User.Identity.GetUserId());

如果您已经将用户的键从 GUID 更改为 Int,请使用以下代码:

如果您已将用户的密钥从GUID更改为Int,请使用此代码:

var roles = userManager.GetRoles(User.Identity.GetUserId<int>());

0

您可以使用用户管理器来实现这个目的:

 var userRoles = await _userManager.GetRolesAsync(user);

0
string[] userroles = Roles.GetRolesForUser(Page.User.Identity.Name);
foreach(var role in userroles)
{
Response.Write(role);
}

0

这就是你要找的东西:

@if (Request.IsAuthenticated)
{
    if (User.IsInRole("Admin"))
    {
      <h1> I only show this text to admin users </h1>
    }
}             

注意:如果您已经实现了AccountController.cs文件,您可以检查其中定义的角色。


-1

不太确定你的问题。

你可以这样做:

this.User.IsInRole();
//loop and check whether the user is in your role.

this 将对应于一个 页面类,因此您只能在页面内编写上述代码,this.User 返回一个 IPrincipal


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接