我从未见过这样做,但我有一个想法,做授权更纯粹的面向对象的方式。对于每个需要授权的方法,我们都关联一个委托。在初始化类的过程中,我们将委托连接起来,以便它们指向适当的方法(基于用户的权限)。例如:
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.
}
}
这样,客户端代码就不必明确地检查用户是否处于角色中,它只需要调用方法。当然,每个方法都应该返回一条状态消息,以便我们知道它是否失败以及失败的原因。
思想?