【发布时间】:2015-02-12 19:39:26
【问题描述】:
我有这个代码来授权用户:
public enum Role {
Admin,
User
}
public class AuthorizeRolesAttribute : AuthorizeAttribute
{
private Role[] _roles;
public AuthorizeRolesAttribute(params Role[] roles)
{
_roles = roles;
}
protected override bool IsAuthorized(HttpActionContext actionContext)
{
ClaimsIdentity claimsIdentity;
var httpContext = HttpContext.Current;
if (!(httpContext.User.Identity is ClaimsIdentity))
{
return false;
}
claimsIdentity = httpContext.User.Identity as ClaimsIdentity;
var roleId = claimsIdentity.FindFirst("RoleId");
if (_roles == null)
{
// just extra defense, not sure it should happen
return false;
}
// This line fails
return _roles.Contains(roleId);
}
}
它检查以下内容:
[AuthorizeRoles(Role.Admin, Role.User)]
但是我感到困惑。 _roles 包含一个角色类型的数组。而 roleId 是一个代表角色的数字。
我的包含行失败并显示此消息:
Error 2 'Entities.Enums.Role[]' does not contain a definition for 'Contains'
and the best extension method overload 'System.Linq.Queryable.Contains<TSource>
(System.Linq.IQueryable<TSource>, TSource)' has some invalid arguments
我怎样才能使 roleId 转换为 Role 类型以便包含工作?
【问题讨论】:
-
FindFirst()返回一个Claim类型的对象,而不是int。
标签: c#