Я разрабатываю приложение MVC 5 с настраиваемым поставщиком роли, но кажется, что атрибут авторизации никогда не вызывает моего поставщика роли клиентов. Мой код, как показано ниже:Авторизовать атрибут пользовательского провайдера ролей, который не работает в MVC 5
namespace SIMSPortal.Models
{
public class MyCustomRoleProvider:RoleProvider
{
public override string[] GetRolesForUser(string username)
{
//throw new NotImplementedException();
using(var usersContext = new SchoolPortalEntities())
{
var user = usersContext.login_details.SingleOrDefault(u => u.user_id == username);
if(user == null)
return new string[] { };
return user.UserInRoles == null ? new string[] { } :
user.UserInRoles.Select(u => u.Role).Select(u => u.RoleName).ToArray();
}
}
}
}
мой конфигурационный файл:
<add key="PreserveLoginUrl" value="true" />
<add key="enableSimpleMembership" value="false" />
<add key="autoFormsAuthentication" value="false" />
</appSettings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Login/UserLogin" timeout="2880" />
</authentication>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<roleManager defaultProvider="CustomRoleProvider" enabled="true" cacheRolesInCookie="false">
<providers>
<clear />
<add name="CustomRoleProvider" type="SIMSPortal.Models.MyCustomRoleProvider" />
</providers>
</roleManager>
Однако мой пользовательский поставщик роль в папке Model, и я использую EF DB первый подход , Я могу назвать свой собственный метод поставщика роли с следующим кодом в моем контроллере:
String[] roles = Roles.GetRolesForUser(userId);
Однако любой контроллер, где [Авторизоваться] атрибут используется, пользователи всегда перенаправляют на страницу входа в системе, даже если пользователь Войти и роль также действительна.
Как я могу присвоить авторизованный атрибут, позвоните в свой пользовательский поставщик роли?
Почему это никогда не будет правдой 'u.user_id == username' ?? конечно, это должно быть 'u.username == username' или' u.user_id == userId' –
Не могли бы вы опубликовать реализацию 'SchoolPortalEntities' и реализацию типа' login_details'? –
@CallumLinington Коды длиннее требуемой длины, и я не знаю, как отредактировать мой вопрос – UwakPeter