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