ASP.NET MVC +EasyUI 权限设计(四)角色动作
请注明转载地址:http://www.cnblogs.com/arhat
由于最近的事情比较多,一直忙于工作和照顾老婆,所以老魏更新的速度慢了,本来写文章就要占据工作和生活很多的时间,这也就是院子中很多文章都没写完就夭折了的原因了,不是因为作者不愿意写,而是身不由己啊。
写文章不仅锻炼自身的能力,还能够把经验分享给大家,所以贵在坚持啊。如果哪天老魏跟新文章慢了,大家要见谅啊。毕竟写文章的时候还要做案列,截图等等,比较慢的,尤其在构思文章内容的时候,可能很多天都想不出来要怎么写的。
废话不多说了,接着上一章的内容说。在上一章中我们把基础模块写完了,那么可以再上一章的基础上呢,可以把动作分为“模块--动作”,即每个模块都对应自己的动作,这里呢老魏就不在写了。本章主要解决一下角色和动作之间的关系,由于角色和动作之间是多对多的关系,所以牵涉到了一个关系表“ArHat_Role_Action”。这张表中存储的是角色和动作。
首先,我们创建一个RoleController控制器,然后给Index函数添加一个视图文件Index.cshtml。内容如下:
@{
ViewBag.Title = "角色管理";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section script{
$(document).ready(function(){
initUserGrid();
});
function initUserGrid(){
$("#grid").datagrid({
url:'/Role/LoadRoleData',
fitColumns:true,
rownumbers:true,
toolbar: [{
iconCls: 'sys-icon-add',
text:"添加角色",
handler:addRole
}],
columns:[[
{field:'RId',title:'ID',width:50,align:'center'},
{field:'RName',title:'角色名',width:200,align:'center'},
{field:'opt',title:'操作',width:200,align:'center',formatter:function(v,r,i){
return "<a href='javascript:delRole("+r.RId+")'><img src='/Content/sys_icons/user_delete.png' /></a> <a href='javascript:permitRoleAction("+r.RId+")'><img src='/Content/sys_icons/user_edit.png' /></a> ";
}}
]]
});
}
function addRole(){
$('#dialog').dialog({
title: '添加角色',
iconCls:"sys-icon-add",
width: 400,
height: 300,
closed: false,
cache: false,
modal: true,
onClose:function(){
$("#grid").datagrid("reload");
},
content:createIFrame("/Role/AddRole")
});
}
function delRole(_rid){
$.messager.confirm("提示","确认要删除此角色吗?",function(b){
if(b){
$.get("/Permit/Role/DelRole/",{rid:_rid},function(data){
if(data=="y"){
$("#grid").datagrid("reload");
}
},"text");
}
});
}
function permitRoleAction(_rid){
$('#dialog').dialog({
title: '角色授权',
iconCls:"sys-icon-add",
width: 400,
height: 300,
closed: false,
cache: false,
modal: true,
onClose:function(){
$("#grid").datagrid("reload");
},
content:createIFrame("/Role/PermitRole/"+_rid)
});
}
}
<table id="grid" data-options="fit:true"></table>
<div id="dialog" style="overflow:hidden"></div>
在上面的代码中,把数据加载和相应的功能函数都已经写好了,下面主要是在控制器中实现相应的数据就可以了。

当点击“添加角色”按钮的时候,会打开一个弹出层,在弹出层中一个页面,也就是Role控制器下的AddRole这个动作,但是这个动作要分为两个,一个是用来作为页面的,一个用来处理提交传递过来的值。下面来看一下此时的Role控制器的代码。
public class RoleController : Controller
{
private BLL.B_Permit permitBLL = new BLL.B_Permit();
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult LoadRoleData()
{
var json = new { total = permitBLL.GetAllRoleList().Count, rows = permitBLL.GetAllRoleList() };
return Json(json);
}
[HttpGet]
public ActionResult AddRole()
{
return View();
}
[HttpPost]
public ActionResult AddRole(Model.M_ArHat_Role role)
{
try
{
permitBLL.AddRole(role);
StringBuilder sb = new StringBuilder();
sb.Append(@"
<script>
parent.$(""#dialog"").dialog(""close"");
</script>
");
return Content(sb.ToString());
}
catch (Exception ex)
{
return Content("添加失败:" + ex.Message);
}
}
}
大家注意到了,在AddRole方法的上面有一个Attribute来说明这个方法的请求类型,这样可以实现在控制器中方法的重载(具体请看《一步步学习ASP.NET MVC》)。

再添加角色的时候,可以把动作也查询出来,一起操作,但这里老魏使用的单独操作,在每条数据的后面可以通过
来给角色添加动作。
当我们点击
的时候,也会有一个弹出层,我们看看一下效果。

这里呢,老魏得说声抱歉了,这个页面做的实在是拿不出手了,本来这个页面可以使用Tree的,但是为了说明一个问题,这里没有使用Tree。什么问题呢,当我们给角色添加一个或几个动作的时候,点击保存,那么再打开这个页面的时候,同时要选中已经添加的,还要显示没有添加的。同时这地方要注意的是,每次给角色添加动作的时候,首先要做一件事就是把这个角色下的动作全部删除掉,然后在添加。我们来看一下这个方法的实现。
[HttpGet]
public ActionResult PermitRole(string rid)
{
ViewBag.ActionList = permitBLL.GetAllActionList();
ViewBag.RoleActionList = permitBLL.GetRoleActionList(rid);
ViewBag.RId = rid;
return View();
}
[HttpPost]
public ActionResult PermitRoleAction()
{
string aids = Request.Form["aid"];
string rid = Request.Form["RId"];
try
{
permitBLL.AddRoleAction(aids,rid);
StringBuilder sb = new StringBuilder();
sb.Append(@"
<script>
parent.$(""#dialog"").dialog(""close"");
</script>
");
return Content(sb.ToString());
}
catch (Exception ex)
{
return Content("添加失败:" + ex.Message);
}
}
permitBLL.AddRoleAction(aids,rid)这方法就是用来添加动作的,然后我们到BLL中去看下这个方法的实现。
public void AddRoleAction(string aids,string rid)
{
//删除该角色下的所有动作
permitDAL.DeleteRoleAction(rid);
//添加该角色下的动作
foreach (string aid in aids.Split(','))
{
permitDAL.AddRoleAction(aid, rid);
}
}
大家看到了,首先删除,然后在添加,这样前面说的那个问题就可以解决了。由于本章牵涉到的代码比较多,这里在文章的最后提供代码的下载。大家可以参考一下,当然了有什么需要讨论的可以留言给我。
ASP.NET MVC +EasyUI 权限设计(四)角色动作的更多相关文章
- ASP.NET MVC +EasyUI 权限设计(二)环境搭建
请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...
- ASP.NET MVC +EasyUI 权限设计(一)开篇
在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...
- ASP.NET MVC +EasyUI 权限设计(三)基础模块
请注明转载地址:http://www.cnblogs.com/arhat 在上一章中呢,我们基本上搭建好了环境,那么本章我们就从基础模块开始写起.由于用户,角色,动作三个当中,都是依赖与动作的,所以本 ...
- asp.net mvc +easyui 实现权限管理(二)
一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...
- ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍
一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...
- 关于ASP.NET MVC的权限认证的一些总结
最近在学ASP.NET MVC的权限认证的一些东西,上网搜索了一阵,发现网上的方法大多数是以下几类: 一.FormsAuthentication.SetAuthCookie(admin.Name, f ...
- ASP.NET MVC+EasyUI+Entity FrameWork 整合开发
本文详细讲解怎么用ASP.NET MVC+EasyUI+Entity FrameWork 来开发一个项目 对于ASP.NET MVC的Jscript库,主要引用 <script type=.mi ...
- 对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识
对Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架的个人认识 初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相 ...
- Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架
Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架 初次接触Spring.Net+NHibenate+Asp.Net Mvc+Easyui框架,查阅了相关资料,了解了框 ...
随机推荐
- 获得自动增长的MySQL主键
下面的脚本教您如何获得自动增长的MySQL主键,如果您对MySQL主键方面感兴趣的话,不妨一看,相信对您学习MySQL主键方面会有所启迪. import java.sql.Connection; im ...
- 磁珠 磁环 双向二极管 TVS二极管
磁珠专用于抑制信号线.电源线上的高频噪声和尖峰干扰,还具有吸收静电脉冲的能力.磁珠是用来吸收超高频信号,像一些RF电路,PLL,振荡电路,含超高频存储器电路(DDR SDRAM,RAMBUS等)都需要 ...
- JAXL发送房间消息
使用composer形式安装的JAXL <?php require_once "vendor/autoload.php"; $client = new JAXL(array( ...
- ankhSVN安装后,VS2010使用
Tool->option->Source control->plug-in selection,选择ankhSVN AnkhSvn-2.5.12478.zip
- Google Map Api 谷歌地图接口整理
一:基本知识: 1. 使用谷歌地图 API 的第一步就是要注册一个 API 密钥,需要注重一下两点: 1.假如使用 API 的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了. ...
- Nginx服务器不支持PATH_INFO的问题及解决办法
最近在写一个小程序,然后里面自己写了个URL的处理器,比如说访问index.php/article 那么就会自动加载进来article页面,访问index.php/home就会自动加载home页面. ...
- 编写灵活、稳定、高质量的 HTML 和 CSS 代码的规范
HTML 语法 HTML5 doctype 语言属性(Language attribute) 字符编码 IE 兼容模式 引入 CSS 和 JavaScript 文件 实用为王 属性顺序 布尔(bool ...
- Part 97 Performance of a multithreaded program
class Program { static void Main(string[] args) { Stopwatch s = new Stopwatch(); s.Start(); EvenNumb ...
- 自学php找工作【二】 PHP计算时间加一天
最近几天在做一个项目,主要是将SQLserver数据到MySQL数据库,一个url跑一次 同步一次昨天的数据,由于很多数据需要同步,所以做了一个操作界面的,一个单纯跑url的 在其中涉及到了对于时间的 ...
- 集合类学习之HashMap
一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,HashMap ...