代码之家  ›  专栏  ›  技术社区  ›  Rodrick Chapman

更纯粹的oop风格的授权

  •  0
  • Rodrick Chapman  · 技术社区  · 14 年前

    我从未见过这样做,但我有一个想法,做授权更纯粹的面向对象的方式。对于每个需要授权的方法,我们都关联一个委托。在初始化类的过程中,我们将委托连接起来,以便它们指向适当的方法(基于用户的权限)。例如:

    class User
    {
        private deleteMemberDelegate deleteMember;
    
        public StatusMessage DeleteMember(Member member)
        {
            if(deleteMember != null) //in practice every delegate will point to some method, even if it's an innocuous one that just reports 'Access Denied'
            {
                deleteMember(member);
            }
        }
    
        //other methods defined similarly...
    
        User(string name, string password) //cstor.
        {
            //wire up delegates based on user's rights. 
            //Thus we handle authentication and authorization in the same method.
        }
    
    }
    

    这样,客户端代码就不必明确地检查用户是否处于角色中,它只需要调用方法。当然,每个方法都应该返回一条状态消息,以便我们知道它是否失败以及失败的原因。

    思想?

    1 回复  |  直到 11 年前
        1
  •  1
  •   Matthew Flaschen    14 年前

    这基本上是 null object pattern 为了授权。如果您能想出一种方法来设计statusmessage,使调用代码不需要特殊情况,这是一个有趣的想法。例如,对于某些操作,您需要指出“您不能以来宾身份执行此操作,但是否要登录或注册帐户?”因此,某些状态消息可能需要重定向到登录/注册页。