Допустим, у меня есть приложение 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;
}
Если я это сделаю, мне придется ссылаться на классы членства и создавать их экземпляры на обоих уровнях. Это правильный способ создать подобное приложение? Похоже, слишком много избыточности.
Поскольку у меня есть BLL, могу ли я избегать использования атрибутов «[Authorize (Roles =" SomeRoleName ")]" и вместо этого вызывать функцию BLL из кода MVC, чтобы проверить, находится ли пользователь в роли? Если я сделаю это, MVC все равно понадобится ссылка на поставщика членства для аутентификации и так далее, чтобы воспользоваться преимуществами входа и других элементов управления ASP, верно?
Я ухожу с базы и еду в неправильном направлении?