Роль авторизации MVC и IPrincipal - как это работает? - PullRequest
2 голосов
/ 29 января 2011

Мне удалось успешно реализовать пользовательский MembershipProvider для моего приложения MVC2. У меня есть собственная таблица пользователей и таблица ролей.

Моя проблема сейчас заключается в том, что когда я добавляю атрибут [Authorize (Roles = "blah")], он не работает. Я немного искал, но не нашел однозначного ответа, который искал, а именно - как работает эта авторизация роли? Мой web.config использует стандартный поставщик ролей AspNet.

Насколько я понимаю, мой класс User.cs должен реализовывать интерфейс IPrincipal, что означает добавление кода для проверки IsInRole.

Мой вопрос (ы) - это правильно? Как фреймворк узнает и знает, как получить мой пользовательский объект User? Насколько я понимаю, компоненты проверки подлинности и авторизации Asp.Net работают с MembershipUser.

Любые советы, мысли или ссылки будут с благодарностью, Thx * +1009 *

Ответы [ 2 ]

1 голос
/ 29 января 2011

Хорошо, думаю, я понял это, я просто немного ослеп.

Поскольку я создал свой собственный пользовательский MembershipProvider (со своей собственной пользовательской таблицей И таблицей ролей), вполне понятно, что мне пришлось реализовать собственный RoleProvider. Итак, как только я это сделал, все это имеет смысл, потому что у RoleProvider есть метод IsUserInRole, т.е.

public override bool IsUserInRole(string username, string roleName)
    {
        IUserRepository userRepository = GetUserRepository();
        User user = userRepository.Retrieve(username);

        // and here, my User class implements IPrincipal
        if (user != null && user.IsInRole(roleName)) 
                return true;
        else
            return false;
    }
1 голос
/ 29 января 2011

Является ли таблица / код ваших ролей реализацией RoleProvider?Я полагаю, что IPrincipal работает против RoleProvider по умолчанию, настроенного в web.config.

В этом сообщении на форуме рассказывается о том, что вам нужно сделать для реализации собственного IPrincipal, если это необходимобыть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...