Как защитить область MVC4 для администраторов из пользовательской таблицы SQL "AdminUsers"

Я видел несколько примеров защиты приложения MVC с помощью токенов, roleprovider и membershipprovider, но ни один из них не совсем подходит для моего сценария. Вот моя установка..

  • VS2012 связан с SQL 2008 R2 с помощью EntityFramework 4.3 для управления данными.
  • Проект настроен в IIS для базовой аутентификации, поэтому все сотрудники, преподаватели и студенты с empID могут проходить аутентификацию внутри компании или за ее пределами. Некоторые из этих людей являются администраторами, поэтому они управляются в административной области.
  • Я создал область "Администратор" в своем проекте, которая в настоящее время не имеет безопасности, поэтому любой может ввести домен / администратор и быть перенаправлен в эту область. Эта область содержит и администратор (CRUD), встречи (CRUD), настройки (U), инструменты и функциональные возможности отчетов. Секция adminUser и назначений имеет свою собственную таблицу, и CRUD работает как положено.

Вот что я спрашиваю... Как я могу проверить текущую пользовательскую базовую аутентификацию в отношении "Admins" из моей таблицы sql AdminUsers, а затем разрешить только этим людям доступ к моей административной области?

Спасибо за ваше время, Крис

1 ответ

Решение

Если вы не собираетесь полагаться на членство или роли, вы всегда можете написать собственную реализацию AuthorizeAttribute который проверяет пользователя по базе данных.

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class AdminOnlyAttribute : AuthorizeAttribute
{
    public AdminOnlyAttribute()
    {
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (!User not in Admin table)
        {
          throw new UnauthorizedAccessException();
        }
        base.OnAuthorization(filterContext);
    }
}

Или что-то в этом роде. Тогда конечно:

[AdminOnly]
public class AdminController : Controller
{
    // ...
}
Другие вопросы по тегам