Как передать более одного значения пользовательскому методу RoleProvider GetUserRoles в моем приложении MVC?

StackOverflow https://stackoverflow.com/questions/2223741

Вопрос

Я хотел бы вставить свою собственную систему разрешений в новое приложение ASP.NET MVC.Я проделал значительную работу по написанию собственного AuthorizeAttribute для приложения.Я также написал свои собственные реализации MembershipProvider и RoleProvider.Все это прекрасно работает до тех пор, пока мне не понадобится проверить роли, частью которых является мой пользователь.Я сделал все это, чтобы можно было просто сделать это на своих контроллерах, и использовал шаблон MVC по умолчанию в VS2010, чтобы подогнать свой код в качестве прототипа:

[CustomAuth(Roles='X')]
public ActionResult DoSomething()

Однако моя пользовательская система немного странная.Я не вызываю базу данных SQL.Это простой веб-сервис, который предоставляет 3 метода:CheckPassword, GetPermissions, Веб-логин.WebLogin просто объединяет CheckPassword и GetPermissions в один вызов.Когда использование WebLogin из ValidateUser не работало, я вызывал TestPassword из MembershipProvider.ValidateUser(userName,password), и когда этот вызов был успешным, я возвращал UserID, иначе он не удался, и я получил NULL.

Проблема в том, что я вызываю свою реализацию RoleProvider.Абстрактный класс определил GetRolesForUser с одним параметром userName.Для работы моего метода GetPermissions() требуется более одного имени пользователя.Это определяется так:

GetPermissions(privateKey,userName)

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

public override string[] GetRolesForUser(string username)

Невозможно ли вызвать мой собственный метод из моего собственного RoleProvider?

Это было полезно?

Решение

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

    RoleProvider rp = Roles.Provider;
    (rp as MyRoleProvider).GetPermissions(privateKey,userName);

Другие советы

Я думаю, что это должно быть:

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top