Предположим, у меня есть приложение ASP.Net MVC, и это приложение (UI) ссылается на уровень бизнес-логики (BLL), а BLL ссылается на мой уровень доступа к данным (DAL).
Я использую службу пользовательского членства и роли для авторизации.
Я пытаюсь определить, какие слои должны ссылаться на моего поставщика членства.
В MVC вы можете выполнять проверки авторизации следующим образом:
[Authorize(Roles = "SomeRoleName")]
public ActionResult Index()
{
//do something
}
И в моем BLL я могу проверить, есть ли у Пользователя роль:
public static bool IsRoleEditor(User user, Role userRole)
{
bool retValue = false;
if (user.Application.AppID == UserRole.Application.AppID)
{
if (Roles.IsUserInRole("ModifyRoles"))
{
retValue = true;
}
return retValue;
}
Мне нужно будет ссылаться и создавать экземпляры классов Membership в обоих слоях, если я это сделаю. Является ли это правильным способом создания такого приложения? Кажется, много избыточности.
Так как у меня есть BLL, я избегаю использования атрибутов "[Authorize (Роли =" SomeRoleName ")]" и вместо этого вызывать функцию BLL из кода MVC, чтобы проверить, является ли пользователь в роли? Если я это сделаю, MVC по-прежнему нуждается в ссылке на поставщика членства для аутентификации и, таким образом, чтобы использовать преимущества входа и других элементов управления ASP, правильно?
Неужели я отстаю от базы и направлюсь в неправильном направлении?