最近在做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();

  

转载于:https://www.cnblogs.com/Chareree/p/8998360.html

Winform 按钮权限拦截AOP相关推荐

  1. shiro 同时实现url和按钮的拦截_Shiro权限管理框架(一):Shiro的基本使用

    其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻.最后 ...

  2. java按钮权限控制_aop (权限控制之功能权限)

    在实际web开发过程中通常会存在功能权限的控制,不如这个角色只允许拥有查询权限,这个角色拥有CRUD权限,当然按钮权限显示控制上可以用button.tld来控制,本文就不说明. 具体控制流程就是通过登 ...

  3. 【SpringMVC】与权限拦截器冲突导致的Cors跨域设置失效问题

    问题描述 前端域名FE.com向后端域名BE.com分别请求访问优惠券的列表和提交新增的优惠券,API设计所用的Method分别为Get和Post,结果为前一次访问成功而后一次访问失败.这两次请求都是 ...

  4. filter导致跨域失效_【SpringMVC】与权限拦截器冲突导致的Cors跨域设置失效问题...

    问题描述 前端域名FE.com向后端域名BE.com分别请求访问优惠券的列表和提交新增的优惠券,API设计所用的Method分别为Get和Post,结果为前一次访问成功而后一次访问失败.这两次请求都是 ...

  5. thymeleaf模板+Shiro标签对按钮权限的控制

    thymeleaf模板+Shiro标签对按钮权限的控制 环境介绍 SpringBoot+Shiro+thymeleaf模板+Layui(前端) 这两天学习了shiro相关的技术,碰到一个问题:如何根据 ...

  6. springboot注解 + mybatisplus拦截器实现数据权限拦截(兼容分页插件)

    需求 要求在同一个数据请求方法中,根据不同的权限返回不同的数据集,而且无需并且不能由研发编码控制. 设计思路 竟然要实现查询语句与权限解耦,第一想法联想到的就是AOP,拦截所有的底层sql,加入过滤条 ...

  7. JavaWeb入门篇(6) 实现字符过滤器 解决全局字符乱码 实现模拟权限拦截

    JavaWeb 入门篇(6.1) 过滤器 实现字符过滤器 实现模拟权限拦截 Filter(过滤器) 概述 过滤器是一个对象,它对对资源(Servlet或静态内容)的请求或对资源的响应或两者都执行过滤任 ...

  8. express添加权限拦截

    express通过中间件的方式添加权限拦截 示例代码如下 app.get('/logout', checkLogin);app.get('/logout', function(req, res) {r ...

  9. java反射--注解的定义与运用以及权限拦截

    自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...

  10. java privilege的用法_java反射--注解的定义与运用以及权限拦截

    自定义注解类编写的一些规则: 1. Annotation型定义为@interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是 ...

最新文章

  1. 神经网络要从原子抓起:原来白花花的银子才是神经芯片的未来
  2. 为什么说 Python 内置函数并不是万能的?
  3. MFC自动注册ODBC数据源
  4. qt 一个线程接收数据 主线程更新界面 会造成界面退出 怎么解决_打造一个好产品...
  5. 把Springboot项目部署到服务器上和结束运行
  6. 关于Ubuntu使用笔记
  7. 转帖:对linux中半增加半连接数量和防止服务器被dos***
  8. zabbix利用mutt和msmtp配置邮件报警
  9. iconpath 微信小程序_微信小程序开发(全局配置文件)
  10. jqAutoComplete 和 knockout
  11. labview控件旋转_基于LabVIEW的旋转倒立摆系统设计
  12. struct dirent 和 struct stat 结构体
  13. 简单生成随机迷宫的算法___Prim和DFS
  14. printf 输出格式、域宽
  15. JIRA统计工时,我们用Tempo
  16. 基于Zemax的望远镜物镜设计
  17. 【送谷歌定制礼品】一起寻找最初的写作热忱 即刻动笔!
  18. webrtc 入门第二章 音视频录制
  19. Spring学习(五)—— 自动装配
  20. 可验证的随机函数(VRF)

热门文章

  1. springboot学习笔记03 整合JPA
  2. Python进行特征提取
  3. GCN实践——可视化cora-network
  4. 使用训练好的googlenet caffemodel进行图片分类
  5. 关于FCN代码实现(实践篇)
  6. MNIST数据集格式ubyte转png
  7. 从0开始学习 GITHUB 系列之「如何发现优秀的开源项目?」
  8. 为癌症生存数据集开发神经网络
  9. 编解码器长短期记忆神经网络
  10. InnoDB的RR隔离级别能否防止“幻读”