【问题标题】:Accessing Roles from Custom Authorize Attribute从自定义授权属性访问角色
【发布时间】:2012-03-19 22:22:38
【问题描述】:
我正在创建自己的自定义授权属性,覆盖 AuthorizeCore 方法,并想知道是否可以访问已传递到授权属性标签的角色。
例如,如果我有这个:
[CustomAuthorize(Roles = "Administrator, Sales, Entry")]
是否可以从这里访问这些:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
}
然后我可以拆分字符串并创建一个数组。
【问题讨论】:
标签:
asp.net-mvc-3
authorization
roles
【解决方案1】:
你可以this.Roles,这是一个你需要拆分的字符串。
源代码免费提供。
默认的 AuthorizeCore 实现:
protected virtual bool AuthorizeCore(HttpContextBase httpContext) {
if (httpContext == null) {
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated) {
return false;
}
if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) {
return false;
}
if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)) {
return false;
}
return true;
}
它们有一个内部拆分函数,如下所示:
internal static string[] SplitString(string original) {
if (String.IsNullOrEmpty(original)) {
return new string[0];
}
var split = from piece in original.Split(',')
let trimmed = piece.Trim()
where !String.IsNullOrEmpty(trimmed)
select trimmed;
return split.ToArray();
}