您的位置:首页 > 其它

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期接手了,和他们商量一下测试的事吧。

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上,注册时逻辑的优化,还有一个门户的重新布局,希望能够和下一版的孩子们合作解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: