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.
}
}
这样客户端代码永远不必明确地检查用户是否在角色中,它只是调用方法。当然,每种方法都应该返回一个状态消息,以便我们知道是否以及为什么失败。
想法?
谢谢马修。我编辑了我的问题来澄清,在实践中,每个代表实际上都会指向某个方法,即使该方法只是说明为什么不允许某个特定的操作。我很欣赏Null Object Pattern中的信息,现在我正在阅读它。 – 2010-05-01 02:11:31
@Matthew - 啊,现在我正在阅读模式文献。所以我可能希望StatusMessage类实现命令模式。 – 2010-05-01 02:22:11