我不是一个网络开发者,但每隔几年我就会在电视上播放一个或者和他们一起看起来很酷。我最后一次狂热使用ASP.NET回到了webform时代。那时候,拥有基于Web的用户体验来管理网站上的用户非常简单。我理解ASP.NET Identity 1.0 / 2.0和联合会旨在为开发人员提供各种新的发光棒和奶嘴,但是让我惊讶地打开VS 2013,启动一个新的MVC / SPA网络应用程序,不能轻易做其他人应该需要和可能做的事情,这是通过网站本身的一些管理员用户管理他们的用户。
所以,如果你是DTC(下到代码),我会很感激如何做到以下的任何简单例子(#1是迄今为止最重要的。我可以推断为#2和#3 ...我希望。)。假设没什么特别的(使用嵌入式SQL DB的本地机器项目。你知道,项目模板是默认的。):
在新的MVC项目中,我看到了表格,就像永远存在的表格一样。基本用户的东西很容易暴露,但是一个老的,可信赖的和必要的朋友(角色)似乎需要一些伏都教,魔法或秘密酱以同样简单的方式暴露。我不是直接通过SQL来破坏表格。我知道在新的世界秩序中这是不好的,并且可能会让保镖小心翼翼,他们不应该让我进入天鹅绒绳索后面的聚会。
P.S。我甚至在这里和其他地方看过一些帖子,建议角色可以完成索赔。虽然这似乎是合乎逻辑的,但我更喜欢ASP.NET Identity 2.0基于仍存在的角色残留(.NET类型,SQL表等)。
答案 0 :(得分:1)
我发现这个问题非常简单(比以前更多,至少在会员制度下)。默认安装使用Entity Framework作为其后端,并创建三个表(以及其他表):一个用于用户,一个用于角色,一个用于多对多关系。它还为我们提供了两个类,帮助我们管理用户和角色:IdentityUserManager和IdentityRoleManager。使用默认模板,我们可以获得从这些继承的类(ApplicationUserManager和ApplicationRoleManager)。通过这些类,我们可以获得管理用户和角色的基本功能。
关于你上一次p.s的最后评论:当你登录时,框架会将你的角色(存储在数据库中)存储为声明(存储在身份验证cookie中)。您可以通过ApplicationUser.Identity的ClaimsIdentity访问这些声明,这样您每次想要了解当前用户的角色时都不必访问数据库。这也用于授权操作过滤器。
答案 1 :(得分:0)
对于1.使用EntityFramework创建具有读/写操作的新控制器(右键单击controllers文件夹)并选择模型ApplicationUser
。
2和3.您可以将此代码粘贴到Seed
Migrations/Configuration.cs
方法中
if (!context.Users.Any()) {
System.Diagnostics.Debug.WriteLine("INSIDE USER SEED");
try {
var store = new UserStore<ApplicationUser>(context);
var userManager = new ApplicationUserManager(store);
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
string roleName = "Admin";
if (!roleManager.RoleExists(roleName)) {
roleManager.Create(new IdentityRole(roleName));
}
roleName = "TeleMarketer";
if (!roleManager.RoleExists(roleName)) {
roleManager.Create(new IdentityRole(roleName));
}
roleName = "Marketer";
if (!roleManager.RoleExists(roleName)) {
roleManager.Create(new IdentityRole(roleName));
}
var user = new ApplicationUser() { Email = "informatyka4444@wp.pl", UserName = "informatyka4444@wp.pl" };
userManager.Create(user, "TestPass44!");
userManager.AddToRole(user.Id, "Admin");
user = new ApplicationUser() { Email = "s8359@pjwstk.edu.pl", UserName = "s8359@pjwstk.edu.pl" };
userManager.Create(user, "TestPass44!");
userManager.AddToRole(user.Id, "Admin");
user = new ApplicationUser() { Email = "marketer@wp.pl", UserName = "marketer@wp.pl" };
userManager.Create(user, "TestPass44!");
userManager.AddToRole(user.Id, "Marketer");
user = new ApplicationUser() { Email = "telemarketer@wp.pl", UserName = "telemarketer@wp.pl" };
userManager.Create(user, "TestPass44!");
userManager.AddToRole(user.Id, "TeleMarketer");
} catch (DbEntityValidationException e) {
System.Diagnostics.Debug.WriteLine("EXC: ");
foreach (DbEntityValidationResult result in e.EntityValidationErrors) {
foreach (DbValidationError error in result.ValidationErrors) {
System.Diagnostics.Debug.WriteLine(error.ErrorMessage);
}
}
}
}