Пользовательский пользователь и роли с ASP.NET MVC3 - PullRequest
1 голос
/ 29 февраля 2012

У меня есть сайт ASP.NET MVC с сервером CAS, настроенным в качестве типа аутентификации.У меня также есть отдельная база данных с таблицей Users и таблицей Roles (с привязкой User к одной или нескольким ролям).Пользователь может войти в систему только в том случае, если имя пользователя указано в таблице «Пользователь» и в системе CAS.У меня есть это решение работает.

Моя проблема в том, что мне сейчас нужна какая-то форма триггера для User.IsAuthenticated, чтобы я мог отслеживать текущего пользователя (из моей базы данных), без возможности того, что я пытаюсь разрешить отслеживание пользователя, который вышел из системы,Я думал о том, что мне нужно добавить пользователя в HttpContext, но я не уверен, как запустить очистку пользователя, если время сеанса CAS истекло или пользователь вышел из системы.

Я также хотел бы иметь некоторые функциональные возможности, такие как User.IsInRole (снова используя мою базу данных, а не ASP.NET), но я не уверен, как это осуществить.Я полагаю, что если я смогу успешно добавить пользователя в HttpContext, то метод IsInRole будет просто методом User.Roles.Contains (string role), но как его можно использовать, если, например, я хочу использовать метод сDataAnnotation [Authorize (role = "ExampleRole")].

Я смотрел на такие вопросы, как Как мне создать пользовательский поставщик членства для ASP.NET MVC 2? , но это не работает для меня (возможно, со мной, используяАутентификация CAS?)

Буду признателен за любые рекомендации или справочные материалы, так как я действительно не уверен, с чего мне вообще начинать.Я прочитал о GenericPrinciple, IPrinciple и IIdentity, но я изо всех сил пытаюсь понять, как я могу применить их к моему текущему проекту.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2012

Завершено пользовательским атрибутом авторизации, который использует вход в систему CAS, чтобы проверить, существует ли пользователь в моей базе данных.Он также проверяет роли этого пользователя.Я также использовал статический класс для сохранения текущего пользователя в сеансе с помощью метода выхода из системы, который прекращает сеанс при выходе пользователя из системы.

0 голосов
/ 02 марта 2012

У меня есть два партнера для вас. Эта ссылка действительно хорошо объясняет, как заменить пользователя HttpContext своим собственным объектом: http://bradygaster.com/custom-authentication-with-mvc-3.0

Его подход использует фильтры MVC, но вы также можете перехватить событие аутентификации в файле Global.asax. Использование системы форм с вашей собственной реализацией может быть тривиальным или нет, в зависимости от того, что вы делаете, но все сводится к вызову FormsAuthentication.SetAuthCookie и .SignOut среди вашей собственной логики.

   public static void FormsLogin(this User user, bool persist)
    {
        FormsAuthentication.SetAuthCookie(user.DisplayName, persist);
        user.AddHistory("Login event.", HistoryType.Login, "SYSTEM");
        Users.OnUserLogin(user);
        SetLastActivity(user);
    }

    public static void FormsLogout(this User user)
    {
        FormsAuthentication.SignOut();
    }

Наконец, после того, как вы наладили вход в систему, вы можете использовать собственную более сложную систему разрешений, создав собственный атрибут аутентификации. Я помню, как складывал это воедино из некоторых других ответов и статей, но я не могу найти источники в данный момент, я постараюсь редактировать с источниками для кредита, где это должно, если я найду их. Пока все, что я могу предложить, это суть, которая предлагает один из атрибутов, которые я использую: https://gist.github.com/1959509

Имейте в виду, что единственная действительно важная часть - это переопределение OnAuthorization, которое выполняет реальную работу.

...