我有以下变量,它选择当前用户签名的所有角色:
var myInterval = false;
$('#backwardBtn').mouseover(function(){
$('#rollerSelector').trigger('backward');
myInterval = setInterval(function(){
$('#rollerSelector').trigger('backward');
}, 1000);
}).mouseout(function() {
clearInterval(myInterval);
myInterval = false;
$('#rollerSelector li:first-child').addClass('rollerFirst');
$('#rollerSelector li:nth-child(2)').addClass('rollerSecond');
});
我希望能够仅针对开头有Club的角色和最后有Admin的角色过滤此列表。
角色由俱乐部,俱乐部Id和管理员组成。
我已经尝试添加包含条款,但还没有运气。
答案 0 :(得分:0)
{{1}}
可选地,如果需要,可以在等式检查中使用StringComparison IgnoreCase选项。
答案 1 :(得分:0)
感谢@lyz的回答:
var roles = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role && c.Value.StartsWith("Club") && c.Value.EndsWith("Admin"))
.Select(c => c.Value);
答案 2 :(得分:0)
当然,您可以使用Claims
,但还有其他一些(并且更简单)来获取当前用户角色。
第一个是使用UserManager<TUser>
类,它是一个实例IUserManager<TUser>
接口。创建默认项目时,它将作为属性存储在控制器中。这个类有许多有用的方法来处理用户帐户本身(创建,编辑,删除)和用户角色(分配,取消分配和检索它们)。此外,使用此经理,您可以1000%确定如果有人在1秒前更改了用户角色,您将获得适当的用户角色始终
第二个是使用IsInRole(string role)
控制器的内置User
方法&#39;属性。如果当前登录的用户具有指定的角色,则返回true,否则返回false。这种方法有点不稳定&#34;因为它依赖于User
数据,这是IPrincipal
的一个实例,并在您的用户登录时分配。如果当前已登录,则更改当前用户角色只能在之后进行39;给这个用户注销,然后再次登录。这是因为您需要将IdentityUser
实例的实例重新分配给当前IPrincipal
。此外,Claims
ClaimsIdentity
数组也是如此。但如果您确定在您的系统中无法做到这一点 - 您可以忘掉它。
此外,如果您在角色枚举中定义了角色,则最好为User
创建自己的扩展方法,该方法将获取您的角色枚举值,而不是在每次调用内置ToString()
时调用IsInRole()
1}}:
public static bool IsInRole(this IPrincipal principal, RolesEnum value)
{
return principal.IsInRole(value.ToString());
}
如果您愿意,也可以使用相同的方式创建自己的帮助方法来检查角色。
如果您希望使用LINQ
查询,只需将Where
表达式替换为:
.Where(c => c.Type == ClaimTypes.Role && c.Value.StartsWith(startValeu) && c.Value.EndsWith(endValue))