2010-05-01 37 views
0

我从来没有见过这样做,但我有一个更纯粹的OO方式进行授权的想法。对于每个需要授权的方法,我们都关联一个委托。在类的初始化期间,我们连接代表,以便它们指向适当的方法(基于用户权限)。例如:更纯粹的OOP风格的授权

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

这基本上是null object pattern授权。如果你能想出一种设计StatusMessage的方法,这样调用代码不需要特殊情况,这是一个有趣的想法。例如,对于某些操作,您需要指出“您不能以访客身份登录,但是您想登录还是注册一个账户?”所以某些StatusMessages可能需要重定向到登录/注册页面。

+0

谢谢马修。我编辑了我的问题来澄清,在实践中,每个代表实际上都会指向某个方法,即使该方法只是说明为什么不允许某个特定的操作。我很欣赏Null Object Pattern中的信息,现在我正在阅读它。 – 2010-05-01 02:11:31

+0

@Matthew - 啊,现在我正在阅读模式文献。所以我可能希望StatusMessage类实现命令模式。 – 2010-05-01 02:22:11