B\S备忘录30——权限的控制按钮思路,看清楚是思路。
2015-10-16 20:55
309 查看
上周刚进了Java的坑,这周又回来了,毕竟权限这里还有很多遗留的问题需要我去解决的,这次先写一写最近的研究。
控制按钮这个功能一直都没有人来做,当初是我做的控制页面,导致后面接手的兄弟们不太好整,光是看懂那个JS就很费劲了,更别提做出控制按钮了。所以这个从2.0就说要做出来的功能,也是终于有时间来研究研究了。
话说我的思路其实很简单,找一个专门的类来处理点击的页面资源的ID,然后这个ID下的按钮资源,最后返回一个JS去执行。然而问题卡就卡在,这个逻辑要放哪呢?
知道我遇到了Filter这个东西,MVC自带的过滤器,可以设置在Action后面执行,那设置他执行玩加载页面的Action之后执行这个方法不就行了。
然后又遇到一个问题,我是点了一个页面对吧,这个页面也有一个ID对吧,那这个ID怎么传到Filter中呢?这几天还在研究cookie这个东西,然后就顺手用一下吧。
下面是我写的一个示例,因为需要至少三个人的模块来测试,现在大伙都忙,没空管.Net这边的东西,就没做测试,等11期接手了,和他们商量一下测试的事吧。
权限这边剩下的问题也不多了,还有一个AOP拦截WCF类获取参数中的链接字符串,组织机构挂钩的数据权限,CAS要把Cookie写到用户的IP上,注册时逻辑的优化,还有一个门户的重新布局,希望能够和下一版的孩子们合作解决了。
控制按钮这个功能一直都没有人来做,当初是我做的控制页面,导致后面接手的兄弟们不太好整,光是看懂那个JS就很费劲了,更别提做出控制按钮了。所以这个从2.0就说要做出来的功能,也是终于有时间来研究研究了。
话说我的思路其实很简单,找一个专门的类来处理点击的页面资源的ID,然后这个ID下的按钮资源,最后返回一个JS去执行。然而问题卡就卡在,这个逻辑要放哪呢?
知道我遇到了Filter这个东西,MVC自带的过滤器,可以设置在Action后面执行,那设置他执行玩加载页面的Action之后执行这个方法不就行了。
然后又遇到一个问题,我是点了一个页面对吧,这个页面也有一个ID对吧,那这个ID怎么传到Filter中呢?这几天还在研究cookie这个东西,然后就顺手用一下吧。
下面是我写的一个示例,因为需要至少三个人的模块来测试,现在大伙都忙,没空管.Net这边的东西,就没做测试,等11期接手了,和他们商量一下测试的事吧。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using ITOO.Library.Core.Memcache; using ITOO.Authority.ViewModel; namespace ITOO.AuthorityDoorLogon.Client.Filter { public class BtnAuthorityFilter : ActionFilterAttribute { public override void OnActionExecuted(ActionExecutedContext filterContext) { List<ResourceViewModel> ResourceList = new List<ResourceViewModel>(); List<ResourceViewModel> btnList = new List<ResourceViewModel>(); string ControlBtnJS = "<script languge='javascript'>"; //1.获得登陆用户的角色信息 HttpCookie selfUserInfo = System.Web.HttpContext.Current.Request.Cookies.Get("selfUserInfo"); Dictionary<string, string> userInfoRoleId = (Dictionary<string, string>)MemcacheHelper.Get(selfUserInfo.Value); string roleId = userInfoRoleId["RoleViewModelId"].ToString(); //2.如果角色信息不为空,根据角色id查询所拥有的资源 if (userInfoRoleId != null) { //从Memcache缓存中取该角色拥有的资源 ResourceList = (List<ResourceViewModel>)MemcacheHelper.Get(roleId); } else { return; } //3.获取当前进入的页面或模块资源的ID string pageId = System.Web.HttpContext.Current.Request.Cookies.Get("clickPageId").Values.ToString(); //4.循环资源列表,获得当前页面下面的按钮 //如果获得的资源列表不为空 if (ResourceList.Count != 0) { //循环资源列表 for (int i = 0; i < ResourceList.Count; i++) { //如果这个资源的pid是点击的页面,并且类型是按钮,把他加入按钮list中(这里也可以根据pid查询数据库中的字段) if (ResourceList[i].ResourcePId.ToString() == pageId && ResourceList[i].Type == "按钮") { btnList.Add(ResourceList[i]); } } } else { return; } //5.根据获得的按钮list编写返回页面的JS for (int i = 0; i < btnList.Count; i++) { //获得按钮元素 ControlBtnJS+="var "+btnList[i].ResourceId+"=document.getElementsByName('"+btnList[i].ResourceName+"')"; //控制按钮的样式为显示 ControlBtnJS+=btnList[i].ResourceId+".display='inline'"; } ControlBtnJS += "</script>"; //6.执行JS,使按钮显示 System.Web.HttpContext.Current.Response.Write(ControlBtnJS); } } }差不多就这样吧,肯定会遇到各种问题,到时候再说。
权限这边剩下的问题也不多了,还有一个AOP拦截WCF类获取参数中的链接字符串,组织机构挂钩的数据权限,CAS要把Cookie写到用户的IP上,注册时逻辑的优化,还有一个门户的重新布局,希望能够和下一版的孩子们合作解决了。
相关文章推荐
- js基础知识总结篇
- 接口的成员特点
- 链表
- Unique Paths
- 如何准确的计算并提高APP用户留存?
- 学生选课系统java实现
- 获取手机联系人
- vector的应用
- CAShapeLayer--备用
- 组合问题-----从字母表中选择n个字母
- ImportError: cannot import name IncompleteRead
- 项目
- Android基础入门教程——8.3.2 绘图类实战示例
- Centos端口关闭与打开命令
- 20135327郭皓——信息安全系统设计基础第六周学习总结
- Android apk反编译及AS代码混淆方法
- 常用的maven镜像
- IOCCC.1987.korn.c.解析
- POJ 2533 Longest Ordered Subsequence
- IOS NSDate