2010-05-01 3 views
0

Я никогда не видел этого, но у меня возникла идея сделать авторизацию более чисто OO. Для каждого метода, требующего авторизации, мы связываем делегата. Во время инициализации класса мы подключаем делегатов, чтобы они указывали на соответствующий метод (на основе прав пользователя). Например:Авторизация в более чисто стиле ООП

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

Thanks Matthew. Я отредактировал свой вопрос, чтобы пояснить, что на практике каждый делегат фактически укажет некоторые на метод, даже если метод просто говорит, почему конкретная операция не разрешена. Я действительно ценю информацию об шаблоне нулевого объекта, сейчас я читаю об этом. –

+0

@Matthew - Ах, теперь я читаю литературу по шаблону. Поэтому мне может потребоваться, чтобы класс StatusMessage реализовал Command Pattern. –

Смежные вопросы