zoukankan      html  css  js  c++  java
  • Winform 按钮权限拦截AOP

    最近在做winform的按钮权限,要做的怎么和BS中的一样调用前拦截,参考了网上资料,目前最流行的AOP有3个。

    POSTSHARP, 这个用不起要收费,还有一个Mono.ceils,这个不能做调试,而且还要对IL 要熟练,最后一个是大名鼎鼎的Castle,

    其中Castle 好像AOP都要使用接口,但是在winform的权限按钮里使用,那量太大可能会有性能影响,所以自己写一个AOP,

    首先建立一个权限类,所有的带权限的调用都走这个类,

    /// <summary>
        /// 权限基类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class BasePersmission<T> where T: class
        {
    
            public BasePersmission()
            {
    
            }
    
            Expression<Action<T>> expression = null;
    
            private T t = null;
          
            /// <summary>
            /// 构造函数
            /// </summary>
            /// <param name="t"></param>
            /// <param name="expression">表达式要执行的方法(M=>M.METHOD())</param>
            public BasePersmission(T t,Expression<Action<T>> expression)
            {
                this.t = t;
                this.expression = expression;
            }
    
    
            /// <summary>
            /// 是否有权限执行
            /// </summary>
            /// <returns></returns>
            private bool isHavPermission()
            {
                return true;
            }
    
            /// <summary>
            /// 执行前
            /// </summary>
            private void BeforeExecute()
            {
    
            }
    
            /// <summary>
            /// 执行后
            /// </summary>
            private void AfterExecute()
            {
    
            }
    
            /// <summary>
            /// 执行
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            public void Execute()
            {
               
                if (isHavPermission())
                {
                    BeforeExecute();
                    expression.Compile()(t);
                    AfterExecute();
                }
                else
                {
                    throw new Exception("你没有执行权限");
                }
              
    
            }
           
    
        }
    

      

    在执行方法事件中调用Execute,

    执行前可做权限判断,如果没有按钮权限则抛错。

    可做拦截一样的功能,执行前的方法可以在里面写如执行日志,执行后可以写执行成功日志。

    但是没如果Expression中的方法执行失败好像After不能执行,具体的按自己需求更新抛到前端的错误消息。

    方法调用

       var pers = new BasePersmission<FrmUser>(this, (m) => m.QueryUser(txtUserId.Text.Trim(), txtUserName.Text.Trim()));
    
                pers.Execute();
    

      

  • 相关阅读:
    JMeter实现登录初始化(类似LR的init函数功能实现)
    修改ini文件的批处理
    pycharm-professional-2017.1.1.exe专业版激活方法
    loadrunner下的putty和plink
    Centos下安装LoadRunner负载机
    VMware安装操作系统提示 " Intel VT-x 处于禁用状态"解决方法
    mongodb中投票节点作用
    crunch创建自己的密码字典文件
    Nessus忘记密码的解决
    shell判断文件是否为空
  • 原文地址:https://www.cnblogs.com/Chareree/p/8998360.html
Copyright © 2011-2022 走看看