新建一个AdminViewModel 文件,建立视图模型类

public class RoleViewModel
{
public string Id { get; set; }

[Required(AllowEmptyStrings=false)]
[Display(Name="角色名称")]
public string Name { get; set; }

[Display(Name="角色描述")]
[StringLength(50,ErrorMessage="{0}不能超过50个字符")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
}

新建一个角色控制器RoleAdminController,并初始化UserManager值。

public class RoleAdminController : Controller
{
public RoleAdminController()
{ }

//构造函数注入;
public RoleAdminController(ApplicationUserManager userManager, ApplicationRoleManager roleManager)
{
UserManager = userManager;
RoleManager = roleManager;
}

//定义字段
private ApplicationUserManager _userManager;

public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();//Microsoft.AspNet.Identity.Owin 命名空间下。 空值合并运算符。
}
set
{
_userManager = value;
}
}

private ApplicationRoleManager _roleManager;

public ApplicationRoleManager RoleManager
{
get
{
return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
}
set
{
_roleManager = value;
}
}

角色列表   要想在角色首页中列表每个角色的用户

模型:

public class IndexRoleViewModel
{
public string Id { get; set; }

[Required(AllowEmptyStrings = false)]
[Display(Name = "角色名称")]
public string Name { get; set; }

[Display(Name = "角色描述")]
[StringLength(50, ErrorMessage = "{0}不能超过50个字符")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }

public List<ApplicationUser> ApplicationUsers { get; set; }

}

}

控制器
// GET: Admin/RoleAdmin
public async Task<ActionResult> Index()
{
var rolesList =new List<IndexRoleViewModel>();
foreach (var role in await RoleManager.Roles.ToListAsync())
{
var _IndexRoleViewModel = new IndexRoleViewModel()
{
Id = role.Id,
Name = role.Name,
Description = role.Description,
ApplicationUsers =new List<ApplicationUser>() //特别注意,初始化一个空的List泛型集合。如果不初始化,将为触发一个引用为Null的异常。
};

foreach (var user in await UserManager.Users.ToListAsync())
{
if (UserManager.IsInRole(user.Id,role.Name))  //遍历用户,如果该用户有此角色,就将此用户加入到集合中。
{
_IndexRoleViewModel.ApplicationUsers.Add(user);
}
}

rolesList.Add(_IndexRoleViewModel); //最后将此ViewModel 加入到列表中,返回给视图。
}

return View(rolesList.ToList()); //异步方法在 System.Data.Entity命名空间下面。
}

视图:

@model IEnumerable<MajorConstruction.Areas.Admin.Models.IndexRoleViewModel>

@{
ViewBag.Title = "角色列表";
}
<h2>@ViewBag.Title</h2>
<hr />

<table class="table table-striped table-hover">
<thead>
<tr>
<th>
@Html.DisplayName("角色名称")
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>@Html.DisplayName("拥有此角色的成员")</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
<ol>
@foreach (var userForRole in item.ApplicationUsers)
{
<li>@userForRole.UserName | @userForRole.RealName</li>
}
</ol>
</td>
<td>
@Html.ActionLink("编辑", "Edit", new { id = item.Id }) |
@Html.ActionLink("详细", "Details", new { id = item.Id })
</td>
</tr>
}
</tbody>
</table>

角色详细信息

控制器:

// GET: Admin/RoleAdmin/Details/5
public async Task<ActionResult> Details(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}

var role = await RoleManager.FindByIdAsync(id);
if (role == null)
{
return HttpNotFound();
}

var users = new List<ApplicationUser>(); //首先要定义一个List泛型容器,用来存放User。
foreach (var user in UserManager.Users.ToList())
{
if(await UserManager.IsInRoleAsync(user.Id,role.Name))
{
users.Add(user);
}

}
ViewBag.Users = users;  //如果只是一个集合,可以不使用ViewModel ,而是使用ViewBag动态对象,将数据带入View中。
ViewBag.UserCount = users.Count();
return View(role);
}

视图:

@model MajorConstruction.Areas.Admin.Models.ApplicationRole
@{
ViewBag.Title = "角色详细信息";
}
<h2>@ViewBag.Title</h2>
<hr />
<div>
<dl class="dl-horizontal">
<dt>
角色名称
</dt>

<dd>
@Html.DisplayFor(model => model.Name)
</dd>

<dt>
@Html.DisplayNameFor(model => model.Description)
</dt>

<dd>
@Html.DisplayFor(model => model.Description)
</dd>

</dl>
</div>
<h4>拥有此角色的所有成员</h4>
@if (ViewBag.UserCount == 0)
{
<hr />
<p>没有用户拥有此角色</p>
}
<table class="table table-striped table-hover">
<tr>
<th>用户名</th>
<th>姓名</th>
<th>性别</th>
<th>邮箱</th>
</tr>
@foreach (var item in ViewBag.Users )
{
<tr>
<td>@item.UserName</td>
<td>@item.RealName</td>
<td>@item.Gender</td>
<td>@item.Email</td>
</tr>
}

</table>
<p>
@Html.ActionLink("编辑", "Edit", new { id = Model.Id }) |
@Html.ActionLink("返回角色列表", "Index")
</p>

编辑角色: 可以使用T4模板快速生成,没有特别的地方。

控制器:

public async Task<ActionResult> Edit(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var role = await RoleManager.FindByIdAsync(id);
if (role == null)
{
return HttpNotFound();
}

RoleViewModel roleViewModel = new RoleViewModel { Id = role.Id, Name = role.Name, Description = role.Description };
return View(roleViewModel);
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,Name,Description")] RoleViewModel roleModel)
{
if (ModelState.IsValid)
{
var role = await RoleManager.FindByIdAsync(roleModel.Id);
role.Name = roleModel.Name;
role.Description = roleModel.Description;
await RoleManager.UpdateAsync(role);
return RedirectToAction("Index");
}
return View(roleModel);
}

视图:

@model MajorConstruction.Areas.Admin.Models.RoleViewModel

@{
ViewBag.Title = "编辑角色";
}
<h2>@ViewBag.Title</h2>
<hr />
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model =>model.Name)

<div class="form-group">
@Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
<p class="form-control-static">@Html.DisplayFor(model =>model.Name)</p>
</div>
</div>

<div class="form-group">
@Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control",rows="5" } })
@Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger", })
</div>
</div>

<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="保存" class="btn btn-default" />
</div>
</div>
</div>
}

<div>
@Html.ActionLink("返回角色列表", "Index")
</div>

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

删除角色和新建角色 和Vs 自动生成的没有两样,在一般的后台控制管理系统中,权限角色的授权都是写死在程序中,所以没有必要提供新建角色和删除角色的功能,只需要在角色初始化器中初始化就可以了。

但是,如果是在动态分配角色权限,比如某个角色对某个操作有查看的权限,就需要有增和删的功能了。

asp.net Identity2 角色(Role)的使用(二)角色管理,角色控制器和视图的更多相关文章

  1. Laravel 5 基础(二)- 路由、控制器和视图简介

    查看 app/Http/routes.php Route::get('/', 'WelcomeController@index'); @是一个界定符,前面是控制器,后面是动作,表示当用户请求url / ...

  2. asp.net -mvc框架复习(9)-实现用户登录控制器和视图的编写并调试

    1.编写控制器 三个步骤: [1]获取数据 [2]业务处理 [3]返回数据 using System;using System.Collections.Generic;using System.Lin ...

  3. (9)ASP.NET Core 中的MVC路由二

    1.URL生成 MVC应用程序可以使用路由的URL生成功能,生成指向操作(Action)的URL链接. IUrlHelper 接口用于生成URL,是MVC与路由之间的基础部分.在控制器.视图和视图组件 ...

  4. asp.net Identity2 角色(Role)的使用(三)用户管理,用户控制器和视图

    修改用户控制器AccountController,增加角色管理器. public class AccountController : Controller { public AccountContro ...

  5. asp.net中使用基于角色role的Forms验证

    http://www.cnblogs.com/yao/archive/2006/06/24/434783.html asp.net中使用基于角色role的Forms验证,大致经过几下四步:1.配置系统 ...

  6. asp.net identity 2.2.0 在WebForm下的角色启用和基本使用(二)

    管理用户功能: 界面部分: <%@ Page Title="" Language="C#" MasterPageFile="~/Site.mas ...

  7. ASP.NET Core 基于JWT的认证(二)

    ASP.NET Core 基于JWT的认证(二) 上一节我们对 Jwt 的一些基础知识进行了一个简单的介绍,这一节我们将详细的讲解,本次我们将详细的介绍一下 Jwt在 .Net Core 上的实际运用 ...

  8. ASP.NET Core 3.0 一个 jwt 的轻量角色/用户、单个API控制的授权认证库

    目录 说明 一.定义角色.API.用户 二.添加自定义事件 三.注入授权服务和中间件 三.如何设置API的授权 四.添加登录颁发 Token 五.部分说明 六.验证 说明 ASP.NET Core 3 ...

  9. Asp.Net MVC+BootStrap+EF6.0实现简单的用户角色权限管理

    这是本人第一次写,写的不好的地方还忘包含.写这个的主要原因是想通过这个来学习下EF的CodeFirst模式,本来也想用AngularJs来玩玩的,但是自己只会普通的绑定,对指令这些不是很熟悉,所以就基 ...

  10. 自学Aruba5.1-Aruba 基于角色(role)的策略管理(重点)

    点击返回:自学Aruba之路 自学Aruba5.1-Aruba 基于角色(role)的策略管理(重点) 1. 角色Role介绍 在ArubaOS中,用户(User)指的是已经完成连接,并获取到IP地址 ...

随机推荐

  1. bzoj1709 [Usaco2007 Oct]Super Paintball超级弹珠 暴力

    [Usaco2007 Oct]Super Paintball超级弹珠 Description 奶牛们最近从著名的奶牛玩具制造商Tycow那里,买了一套仿真版彩弹游戏设备(类乎于真人版CS). Bess ...

  2. 解决Genymotion不能安装软件的问题

    解决Genymotion不能安装软件的问题 官方取消了with google apps字样的rom,导致安装app不兼容的解决 有些童鞋在兴奋的打开Genymotion模拟器后可能会发现无法安装下载下 ...

  3. HH的项链(codevs 2307)

    题目描述 Description HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此,他的 ...

  4. [NOIP2003] 提高组 洛谷P1041 传染病控制

    题目背景 近来,一种新的传染病肆虐全球.蓬莱国也发现了零星感染者,为防止该病在蓬莱国大范围流行,该国政府决定不惜一切代价控制传染病的蔓延.不幸的是,由于人们尚未完全认识这种传染病,难以准确判别病毒携带 ...

  5. [NOIP2001] 提高组 洛谷P1025 数的划分

    题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输 ...

  6. [codeVS1204] 单词背诵

    题目描述 灵梦有n个单词想要背,但她想通过一篇文章中的一段来记住这些单词. 文章由m个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个).并且在背诵的单词量尽量多的情 ...

  7. BZOJ2038 (莫队)

    BZOJ2038: 小Z的袜子 Problem : N只袜子排成一排,每次询问一个区间内的袜子种随机拿两只袜子颜色相同的概率. Solution : 莫队算法真的是简单易懂又暴力. 莫队算法用来离线处 ...

  8. iOS url带中文下载时 报错解决方法

    问题描述:下载文件时, 请求带中文的URL的资源时,比如:http://s237.sznews.com/pic/2010/11/23/e4fa5794926548ac953a8a525a23b6f2/ ...

  9. 如何评价ionic和react native?

    Q:对于开发hybird app首选哪个好?是ionic还是react native?如何评价ionic和react native? A: 我看好React系,React系以正确地姿势,专注地做了正确 ...

  10. 11-Js类和对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...