Если вы хотите использовать части сервисов членства / аутентификации / авторизации asp.net, вам потребуется реализовать пользовательский поставщик ролей для проверки членства в ролях.
Первое, что нужно сделать, это создать класс, унаследованный от System.Web.Security.RoleProvider
, в котором он звучит так, как методы, которые вы изначально заботитесь о реализации:
- FindUsersInRole
- GetRolesForUser
- GetUsersInRole
- IsUserInRole
Итак, вы получите нечто похожее на:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
public class MyCustomRoleProvider : RoleProvider
{
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
}
public override string[] GetRolesForUser(string username)
{
}
public override string[] GetUsersInRole(string roleName)
{
}
public override bool IsUserInRole(string username, string roleName)
{
return GetUsersInRole(roleName).Contains(username);
}
}
Примечание: Visual Studio покажет множество методов, таких как GetAllRoles
с throws new NotImplementedException()
, но я ранее написал поставщика минимальных ролей, который необходим только для реализации методов, перечисленных выше.Это было для ролей «только для чтения», где веб-приложение не обновляло их.
Затем вам нужно будет добавить элемент roleManager
в ваш файл web.config
в system.web
следующим образом:
<roleManager defaultProvider="NameOfYourRoleProvider" enabled="true">
<providers>
<clear />
<add name="NameOfYourRoleProvider" type="Namespace.To.Your.Class.And.Class.Name, Name.Of.Assembly.Containing.Your.RoleProvider" />
</providers>
</roleManager>
Следует иметь в виду, что экземпляр RoleProvider
создается базовой инфраструктурой asp.net, поэтому вам необходимо получить доступ к данным сеанса, пройдя через HttpContext.Current.Session
(и проверяя, что HttpContext.Current
не является нулевым до его использования), что потребует using System.Web;
в коде вашего провайдера.