2

我不是一个交易的Web开发人员,但每隔几年我在电视上播放或与他们挂在一起看起来很酷。我最后一次使用ASP.NET进行讨论的时间又回到了webform时代。那时,有一个基于网络的UX来管理你网站上的用户很简单。据我所知,ASP.NET Identity 1.0/2.0和Federation旨在为开发人员提供各种新的发光棒和奶嘴,但令人惊讶的是我很难打开VS 2013,启动一个新的MVC/SPA网络应用程序,以及不能轻易地做一些其他人应该需要和可能做的事情,这些事情是通过网站本身的一些管理员用户来管理他们的用户。所以,如果你是DTC(下到代码),我将不胜感激任何简单的例子,如何做到以下(#1是最重要的,我可以推断#2和# 3 ...我希望。)。假设没有什么花哨(使用嵌入式SQL数据库在本地机器的项目要知道,项目模板默认值。):MVC与身份2.0 +样本缺乏管理用户角色

  1. 显示一个网站,并将这些角色他们是PART上注册的所有用户。我已经得到了我想要的所有东西直接了解实体框架的用户。但为什么角色在这里并不明显?对M,V和C的片段非常感谢。
  2. 为用户添加或删除角色。
  3. 为用户添加或删除可用角色。

我在新的MVC项目中看到了这些表格,非常类似于永远存在的表格。基本的用户资料很容易被暴露出来,但是一个老的,可信的和必要的朋友(角色)似乎需要一些巫毒,魔咒或者秘密武器才能以同样简单的方式暴露出来。我不是简单地直接通过SQL来分析表。我知道这在新的世界秩序中是不好的,并且可能会让保镖退缩,他们不应该让我进入天鹅绒绳子后面的派对。

p.s.我甚至在这里和其他地方看到过一些帖子,建议角色与索赔完成。虽然这看起来合乎逻辑,但我更喜欢基于仍然存在的角色退化(.NET类型,SQL表等)的ASP.NET Identity 2.0。

+1

http://asp.net/identity上有资源吨。我并不确定从哪里开始,但我认为您的所有问题都包含在以下特色文章中:http://typecastexception.com/post/2014/06/22/ASPNET-Identity-20-Customizing-Users -and-Roles.aspx – Claies 2014-09-20 20:50:41

+1

您可以使用https://github.com/thinktecture/Thinktecture.IdentityManager,它是为管理asp.net身份框架用户,角色和其他操作而创建的。 – DSR 2014-09-20 22:35:12

+1

关于通过索赔的角色。角色仍然存在于“角色”表中,但是当用户登录后,所有分配的角色将作为类型为“角色”的声明保存在cookie中。查看索赔只是在auth-cookie中保存用户相关数据的好方法。 – trailmax 2014-09-20 23:36:48

回答

0

对于1.使用EntityFramework(右键单击控制器文件夹)创建具有读取/写入操作的新控制器,然后选择型号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 = "[email protected]", UserName = "[email protected]" }; 
        userManager.Create(user, "TestPass44!"); 
        userManager.AddToRole(user.Id, "Admin"); 

        user = new ApplicationUser() { Email = "[email protected]", UserName = "[email protected]" }; 
        userManager.Create(user, "TestPass44!"); 
        userManager.AddToRole(user.Id, "Admin"); 

        user = new ApplicationUser() { Email = "[email protected]", UserName = "[email protected]" }; 
        userManager.Create(user, "TestPass44!"); 
        userManager.AddToRole(user.Id, "Marketer"); 

        user = new ApplicationUser() { Email = "[email protected]", UserName = "[email protected]" }; 
        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); 
         } 
        } 

       } 
      } 
1

我觉得这个问题很简单(比以前多得多,与会员制至少)。默认安装使用实体框架作为其后端,并创建三个表格(其中包括):一个用于用户,一个用于角色,一个用于多对多关系。它还为我们提供了两个帮助我们管理用户和角色的类:IdentityUserManager和IdentityRoleManager。使用默认模板,我们可以从这些类继承类(ApplicationUserManager和ApplicationRoleManager)。通过这些类,我们获得了管理用户和角色的基本功能。

最后一条有关您上一页的评论:当您登录时,框架将您的角色(存储在数据库中)作为声明(存储在认证cookie中)存储。您可以通过ApplicationUser.Identity的ClaimsIdentity来访问这些声明,这样您不必每次都想要知道当前用户角色时访问数据库。这也用于授权操作过滤器。

相关问题