我正在開發具有自定義角色提供者的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>
然而,我的自定義角色提供在模型文件夾,我使用EF DB第一種方法。我可以打電話給我的自定義角色提供方法與我的控制器中下面的代碼:
String[] roles = Roles.GetRolesForUser(userId);
但是任何控制器,其中[授權]屬性正在被使用,用戶始終重定向到登錄頁面,甚至當用戶登錄和角色都是有效的。
如何使我的授權屬性,調用我的自定義角色提供者?
爲什麼這會永遠是真實的'u.user_id ==用戶名'?它肯定應該是'u.username ==用戶名'或'u.user_id == userId' –
你可以發佈你的'SchoolPortalEntities'實現和'login_details'類型的實現嗎? –
@CallumLinington代碼長於所需的長度,我不知道如何編輯我的問題 – UwakPeter