B\S备忘录30——权限的控制按钮思路,看清楚是思路。

  上周刚进了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上,注册时逻辑的优化,还有一个门户的重新布局,希望能够和下一版的孩子们合作解决了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值