Как я могу реализовать пользовательский RoleProvider? - PullRequest
2 голосов
/ 01 октября 2009

Я пытаюсь реализовать собственный RoleProvider в своем приложении ASP.NET MVC.

Я создал собственный MembershipProvider, и он работает, так как я могу успешно проверить пользователя. Следующим шагом является реализация RoleProvider, чтобы ограничить доступ к certian Controllers только для пользователей Admin.

Кто-нибудь может дать мне краткое описание шагов, которые мне нужно предпринять?

Дело в том, что у меня сейчас мой контроллер с фильтром авторизации, вот так:

[Authorize(Roles="Admin")]
public class AdminOnlyController : Controller
{ 
    // stuff 
}

и у меня есть класс CustomRoleProvider со следующим методом вместе с множеством не реализованных методов:

public override string[] GetRolesForUser(string username)
{
    if (username == "dave")
    {
        return new string[] { "Admin" };
    }
}

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

if (User.IsInRole("Admin"))
{
    // show links to Admin Controllers
}

Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

3 голосов
/ 07 декабря 2009

Я использовал это в качестве базовой линии для настраиваемого менеджера ролей: http://davidhayden.com/blog/dave/archive/2007/10/17/CreateCustomRoleProviderASPNETRolePermissionsSecurity.aspx

Должно работать в MVC или веб-формах.

ОБНОВЛЕНИЕ: Поскольку эта веб-страница больше не существует, вы можете попробовать эту . Основные требования заключаются в том, что вам необходимо реализовать интерфейс RoleProvider, а именно:

void AddUsersToRoles(string[] usernames, string[] roleNames)
string[] GetRolesForUser(string id)
bool RoleExists(string roleName)
2 голосов
/ 01 октября 2009

Для не реализованных методов обязательно выбрасывайте NotImplementedException . Это должно помочь вам выяснить, какие методы необходимы вашему поставщику для выполнения работы.

Я подозреваю, что вам придется реализовать IsUserInRole .

...