Если вы поддерживаете свои собственные роли, привилегии и сопоставление пользователей внутри своего приложения, в этом случае вы не можете использовать поставщиков ролей по умолчанию.Для этого типа сценариев вам необходимо создать свой собственный поставщик ролей, расширив System.Web.Security.RoleProvider
, как показано ниже.
public class CustomRoleProvider : System.Web.Security.RoleProvider
{
List<string> userRoles;
public CustomRoleProvider()
{
//Populate the roles union privilege of logged in user inside userRoles
}
public override bool IsUserInRole(string username, string roleName)
{
//Mandatory to implement
}
public override string[] GetRolesForUser(string username)
{
//Mandatory to implement
}
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override string ApplicationName
{
get
{
throw new NotImplementedException();
}
set
{
throw new NotImplementedException();
}
}
public override void CreateRole(string roleName)
{
}
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
return true;
}
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}
public override string[] GetAllRoles()
{
throw new NotImplementedException();
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override bool RoleExists(string roleName)
{
throw new NotImplementedException();
}
}
После того, как вы это реализовали, вам нужно зарегистрировать свой RoleProvider в файле конфигурации, как показано ниже.
<roleManager cacheRolesInCookie="false" defaultProvider="CustomRoleProvider" enabled="true">
<providers>
<clear/>
<add name="MyCustomRoleProvier" type="YourLibrary.CustomRoleProvider, YourLibraryName"/>
</providers>
</roleManager>
</system.web>
Теперь вы можете напрямую использовать атрибут фильтра авторизации в своем API или Действие, например
[Authorize(Roles = "Admin")]
public string GetData()
{
}
. Вы также можете проверить этот ответ и для получения дополнительной информации. Поставщик пользовательских ролей