Как передать более одного значения пользовательскому методу RoleProvider GetUserRoles в моем приложении MVC?
-
19-09-2019 - |
Вопрос
Я хотел бы вставить свою собственную систему разрешений в новое приложение 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);