这是来自某些MCTS 70-515考试练习测试的问题。

请帮助正确的2个答案

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

(每个正确的答案提出了一个完整的解决方案。选择两个。)

  • [Authorize(Users =“”)]
  • [Authorize(Roles =“”)]
  • [Authorize(Users =“*”)]
  • [Authorize(Roles =“*”)]
  • 最佳答案

    查看AuthorizeAttribute的源代码可以看到没有通配符“*”。
    如果[Authorize(Users = "")]导致“没人”可以访问该动作,则没有任何意义。
    因此,答案 1 2 是正确的。
    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;
    }
    
    以及RoleUsers属性。
    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
        }
    }
    

    关于asp.net-mvc - AuthorizeAttribute构造函数参数Roles是否等于string.empty的含义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8573166/

    10-09 20:58