使用教程here將用戶數據庫的主鍵從字符串更改爲int,但我在初始化角色管理器時遇到困難。它曾經使用初始化使用自定義角色初始化ASP.NET身份中的RoleManager
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
如何使用新數據創建角色管理器?
更新:我使用MVC 5和EF 6
使用教程here將用戶數據庫的主鍵從字符串更改爲int,但我在初始化角色管理器時遇到困難。它曾經使用初始化使用自定義角色初始化ASP.NET身份中的RoleManager
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
如何使用新數據創建角色管理器?
更新:我使用MVC 5和EF 6
您的ApplicationRoleManager
可能看起來像這樣。因爲你必須繼承你的customRole類而不是IdentityRole
。
public class ApplicationRoleManager : RoleManager<CustomRole, int>
{
public ApplicationRoleManager(IRoleStore<CustomRole, int> roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<CustomRole, int, CustomUserRole>(context.Get<ApplicationDbContext>()));
}
}
然後將以下代碼添加到Startup.Auth.cs類(如果當前不存在)。
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
然後您創建並管理角色。
var roleManager = HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
const string roleName = "Admin";
//Create Role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new CustomRole();
role.Id = 1; // this will be integer
role.Name = roleName;
var roleresult = roleManager.Create(role);
}
希望這會有所幫助。
由於某種原因,該行是startup.auth.cs在一個項目中失蹤,並且角色管理器未初始化,這解決了我的問題,謝謝 – Jay 2015-02-09 09:54:22
'[Authorize(Roles =「Edit」)]'此後自動工作? – Zapnologica 2015-04-14 11:12:45
它應該按預期工作,沒有區別手動直接插入角色到數據庫.. – DSR 2015-04-14 15:40:06
從你的問題,我不能確定是否使用相同的架構(MVC & EF)。
最近我創建了一個MVC + EF解決方案,使用自定義ApplicationUsers & IdentityRoles。 ApplicationUser來源於「Microsoft.AspNet.Identity.EntityFramework.IdentityUser」。 ApplicationRoles實現不變。
我有以下類:
// Configure the used in the application. RoleManager is defined in the ASP.NET Identity core assembly
public class ApplicationRoleManager : RoleManager<IdentityRole>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));
}
}
內configuration.cs(遷移)==>在此將被執行
var roleStore = new RoleStore<IdentityRole>(context);
var roleManager = new RoleManager<IdentityRole>(roleStore);
var applicationRoleAdministrator = new IdentityRole("Administrator");
if (!roleManager.RoleExists(applicationRoleAdministrator.Name))
{
roleManager.Create(applicationRoleAdministrator);
}
// do some logic to find your applicationUserAdministrator
var applicationUserAdministrator = userManager.FindByName("Administrator");
userManager.AddToRole(applicationUserAdministrator.Id, applicationRoleAdministrator.Name);
withing startup.auth.cs '更新數據庫'朝向角色管理器的鏈接:
app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
希望這會有所幫助。其中我有,如果我使用'
var roleManager = new RoleManager<CustomRole,int>(new RoleStore<CustomRole,int,CustomUserRole>(context));
var UserManager = new UserManager<ApplicationUser,int>(new UserStore<ApplicationUser,CustomRole,int,CustomUserLogin,CustomUserRole,CustomUserClaim>(context));
// In Startup iam creating first Admin Role and creating a default Admin User
if (!roleManager.RoleExists("Admin")){
//first we create Admin rool
var role = new CustomRole();
role.Name = "Admin";
roleManager.Create(role);
}
////Here we create a Admin super user who will maintain the website
if (UserManager.FindByName("Admin") == null){
var user = new ApplicationUser() { UserName = "Admin" };
string userPWD = "adminadmin";
var chkUser = UserManager.Create(user, userPWD);
if (chkUser.Succeeded){
var result1 = UserManager.AddToRole(user.Id, "Admin")
;
}
}
完全相同的問題[授權(角色=「管理員」)]'我得到以下錯誤:'用戶實例登錄標誌不支持此版本的SQL Server 。連接將被關閉' – Zapnologica 2015-04-14 11:01:47