据我了解,检查的好方法,如果一个用户在角色是:
if (User.IsInRole("Admin"))
{
}
不过,我如何检查我的用户是在“作者”之一,“管理员”或“超级”的角色? 有没有办法做到这一点无需编码“User.IsInRole”每个角色的 ?
据我了解,检查的好方法,如果一个用户在角色是:
if (User.IsInRole("Admin"))
{
}
不过,我如何检查我的用户是在“作者”之一,“管理员”或“超级”的角色? 有没有办法做到这一点无需编码“User.IsInRole”每个角色的 ?
编辑:如果没有编码的每个角色,做一个LINQ扩展方法,像这样:
private static bool IsInAnyRole(this IPrincipal user, List<string> roles)
{
var userRoles = Roles.GetRolesForUser(user.Identity.Name);
return userRoles.Any(u => roles.Contains(u));
}
对于使用量,这样做:
var roles = new List<string> { "Admin", "Author", "Super" };
if (user.IsInAnyRole(roles))
{
//do something
}
或者没有扩展方法:
var roles = new List<string> { "Admin", "Author", "Super" };
var userRoles = Roles.GetRolesForUser(User.Identity.Name);
if (userRoles.Any(u => roles.Contains(u))
{
//do something
}
有没有内置的方法来检查,如果用户是多个角色,但它是非常容易的创建一个不错的扩展方法来为您处理:
public static bool IsInAnyRole(this IPrincipal principal, params string[] roles)
{
return roles.Any(principal.IsInRole);
}
然后用法是:
if (User.IsInAnyRole("Admin", "Author", "SuperUser"))
{
}
我想阐述一下mattytommo的回答一点,这里是我使用:
扩展方法:
public static bool IsInAnyRole(this IPrincipal user, string[] roles)
{
//Check if authenticated first (optional)
if (!user.Identity.IsAuthenticated) return false;
var userRoles = Roles.GetRolesForUser(user.Identity.Name);
return userRoles.Any(roles.Contains);
}
常量:
public static class Role
{
public const string Administrator = "Administrator";
public const string Moderator = "Moderator";
}
用法:
if (User.IsInAnyRole(new [] {Role.Administrator,Role.Moderator}))
{
//Do stuff
}
您还可以使用
if(Roles.GetRolesForUser(model.UserName).Contains("Admin")){
}
我用下面的代码。 就我而言,我有一个分号去限制字符串作为从web.config中读取参数。 如果你传递一个列表你可以很容易更改下面的代码。
public class ActiveDirectoryGroup
{
public static bool IsInAnyRole(string adRoles)
{
return adRoles.Split(Convert.ToChar(";")).Any(role => !string.IsNullOrEmpty(role.Trim()) && HttpContext.Current.User.IsInRole(role.Trim()));
//If list is passed use below
//return listParameter.Any(role => !string.IsNullOrEmpty(role.Trim()) && HttpContext.Current.User.IsInRole(role.Trim()));
}
}
在web.config中:
<appSettings>
<add key="ADGroup" value="Domain\Admin;Domain\Supervisor;Domain\Manager;" />
</appSettings>
我用它象下面这样在我的页面加载:
if (ActiveDirectoryGroup.IsInAnyRole(ConfigurationManager.AppSettings["ADGroup"]))
{
//do something
}
请用这个简单的方法:
@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
if (User.IsInRole("Administrator") || User.IsInRole("Moderator"))
{
... Your code here
}
}
在我来说,我只需要每个用户一个角色。 所以,我没有这样的:
if (User.Roles.FirstOrDefault().RoleId == "7b433246-5881-4ace-bbaa-e5514191171c") {
//Do something
}