AuthorizeAttribute构造函数参数Roles等于string.empty的含义?

Ima*_*idi 2 asp.net-mvc authorization

这是一些MCTS 70-515考试练习测试的问题.

请帮助正确的2个答案


您正在实现一个允许用户查看和编辑数据的ASP.NET MVC 2 Web应用程序.您需要确保只有登录用户才能访问控制器的"编辑"操作.您可以添加到"编辑"操作以实现此目标的两个可能属性是什么?

(每个正确答案都提供了完整的解决方案.选择两个.)

  1. [授权(用户="")]
  2. [授权(角色="")]
  3. [授权(用户="*")]
  4. [授权(角色="*")]

dkn*_*ack 6

看看AuthorizeAttribute节目的源代码,没有通配符"*".

如果[Authorize(Users = "")]导致"没有人"可以访问该动作是没有意义的.

答案12是正确的.

AuthorizeAttribute的源代码

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;
}
Run Code Online (Sandbox Code Playgroud)

RoleUserspropertie.

public string Roles {
    get {
        return _roles ?? String.Empty;
    }
    set {
        _roles = value;
        _rolesSplit = SplitString(value); // simple split by comma
    }
}

public string Users {
    get {
        return _users ?? String.Empty;
    }
    set {
        _users = value;
        _usersSplit = SplitString(value); // simple split by comma
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1无法击败检查源代码:-) (3认同)