从自定义授权属性访问角色

6

我正在创建自己的自定义授权属性,覆盖AuthorizeCore方法,并想知道是否可以访问已传递到授权属性标记中的角色。

举个例子,如果我有这样的代码:

[CustomAuthorize(Roles = "Administrator, Sales, Entry")]

在这里是否可以从内部访问它们:

protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
    }

我可以将字符串拆分并创建一个数组。


请查看此处:http://stackoverflow.com/a/9479442/745331 - Yorgo
1个回答

9

您可以使用 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();
}

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