0

Я пытаюсь реализовать собственный менеджер роли в приложении MVC5, используя следующие Custom Role Provider Tutorial.Custom Role Manager/Provider

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

namespace Models.Security 
{ 
public class CustomRoleProvider : RoleProvider 
{ 
/// logic 
public override string[] GetRolesForUser(string username) 
    { 
/// logic 
public override bool IsUserInRole(string username, string roleName) 
    { 

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

<system.web> 
<compilation debug="true" targetFramework="4.5.2" /> 
<httpRuntime targetFramework="4.5.2" /> 
<roleManager enabled="true" defaultProvider="CustomRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/> 
    </providers> 
</roleManager> 

Однако, когда я пытаюсь получить доступ к моему приложению я получаю следующее сообщение об ошибке:

Parser Error Сообщение: Не удалось загрузить тип 'Models.Security.CustomRoleProvider'.

Source Error: 

Line 29:  <providers> 
Line 30:   <clear /> 
Line 31:   <add name="CustomRoleProvider" type="Models.Security.CustomRoleProvider"/> 
Line 32:  </providers> 
Line 33:  </roleManager> 

Насколько я знаю, я сделал все, что требуется. Единственное, что отличается, это использование пользовательского членства, связанного с AD

<authentication mode="Forms"> 
    <forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="200" slidingExpiration="false" protection="All" /> 
</authentication> 
<membership defaultProvider="ADMembershipProvider"> 
    <providers> 
    <clear /> 
    <add name="ADMembershipProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider" connectionStringName="ADConnectionString" attributeMapUsername="sAMAccountName" /> 
    </providers> 
</membership> 

Есть ли что-то еще, что мне нужно сделать? Сменил ли MVC5 подход?

ответ

0

Да. MVC 5 использует Identity, Role Provider - это концепция членства в ASP.NET. Ролевые провайдеры не нужны в Identity, потому что вас контролирует роли. Это объект в вашем проекте (или, по крайней мере, это может быть, если вы подкласса IdentityRole), поэтому вы можете делать все, что хотите.

+0

Итак, есть ли простой способ передвижения между ними? Все примеры, которые я нашел на страницах с использованием страниц идентификации Identity! У меня есть пользовательские таблицы с созданными ролями и действиями, которые я хочу проверить с атрибутом авторизации в Action. Я действительно хочу сохранить все роли против моего объекта UserPrincipal при входе в систему, а затем использовать его на протяжении всего сеанса. –

0

Вы все равно можете использовать roleManager и поставщик настраиваемых ролей. Просто нужно настроить своего принципала на тип RolePrincipal. Вы можете сделать это на IAuthenticationFilter и зарегистрировать его на global.asax. См. Эти две ссылки для некоторого примера кода: RolePrincipal/ IAuthenticationFilter