Где поставить методы авторизации? - PullRequest
2 голосов
/ 21 декабря 2011

Это довольно общий вопрос, на самом деле ..

У меня есть пользовательский класс (не каждое приложение? :). Определенные пользователи могут выполнять действия с различными объектами, если у них есть соответствующие разрешения. Что может быть лучше для размещения логики авторизации (или любой логики, которая работает с 2 экземплярами)?

Если поместить его в класс User, я получу набор методов user.CanEditComment(), user.CanEditMessage(), user.CanDoSomething() и т. Д. - это может быть несколько методов для каждой сущности, требующей авторизации. Похоже, метод беспорядок.

С другой стороны, я могу поместить эти методы в сущности, например comment.CanBeEditedBy(user). Но почему-то это тоже не совсем правильно ...

Есть предложения?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 21 декабря 2011

Другой вариант - имитировать действия ролей ASP.NET, определять набор ролей и назначать их пользователям.Затем ваши функции могут запрашивать у пользователя роль (и), необходимую для доступа к этой функции.Вашему пользовательскому классу нужен только один метод HasRole(string roleName), а ваши функции контролируют свой собственный доступ.

2 голосов
/ 21 декабря 2011

Я думаю, что лучшее место для размещения данных для логики авторизации - это ваша база данных.В зависимости от ваших требований вы можете создать несколько таблиц, таких как Users, Roles, Permissions, Locations и т. Д. Недавно я задал вопрос .Вы можете взглянуть на схему.Следующий шаг - логика авторизации.Первое, что приходит мне в голову, - это использование пользовательского класса атрибутов с переопределенным методом OnAuthorization.

public class PermissionsAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        // the best place for your authorization logic
    }
}

Это даст вам возможность разделить доступ внутри контроллеров очень удобным способом (как для меня).

[Permissions()]
public ActionResult Some()
{
}  
1 голос
/ 21 декабря 2011

Смотрите мой ответ на этот вопрос . Поскольку вы храните все в БД, вы можете изменить перечисление Role на список строк (который загружается из БД).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...