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