[2017-11-21]Abp系列——T4应用:权限树定义
本系列目录:Abp介绍和经验分享-目录
今天介绍下,如何使用T4根据json文件自动生成权限定义。
先看成果
成果是:
- 要新增一个权限定义时,打开Json文件,找到目标节点,加个权限定义;
- 生成下Core程序集(因为Json文件都是嵌入式资源文件);
- 跑一遍T4,ok,新增的权限名常量有了,权限树上也加了新权限。
截图:

开工
还是从Personball.Demo项目开始,我从dev分支新建了一个feature_t4_permissions。
展开Personball.Demo.Core程序集,按下述步骤操作
安装包,获取相关文件
打开程序包管理器控制台,默认项目选中Personball.Demo.Core,执行如下命令,安装获取相关文件:
//安装过程中会提示是否执行T4,请取消,还有地方需要修改
Install-Package Abplus.T4.PermissionsFromJson
该nuget包带来如下几个文件:
- Authorization\Builders\Permissions\Sample.json
- Authorization\Builders\BuilderUtils.cs
- Authorization\Builders\PermissionBuilder.tt
- Authorization\Builders\T4MultipleOutputManager.ttinclude
几处修正
- 选中
Sample.json,F4查看属性,确保json文件的属性是嵌入的资源 - 打开
BuilderUtils.cs,将【YourCompany.YourProject】替换成Personball.Demo - 打开
PermissionBuilder.tt,将【YourCompany.YourProject】替换成Personball.Demo - 打开
PermissionBuilder.tt,修正你所使用的Newtonsoft.Json的引用路径(版本号) - 打开
Authorization\DemoAuthorizationProvider.cs,在SetPermissions方法中追加一行代码BuilderUtils.Build(context, "Sample");
其中SetPermissions方法中,可以注释掉原先的context.CreatePermission调用,然后针对每个权限定义json文件,增加代码:
//【Json文件名】替换,如Sample,无文件名后缀
BuilderUtils.Build(context, "【Json文件名】");
如果需要json文件的具体字段定义,请参考BuilderUtils.cs文件中PermissionJson类的定义。
Run
生成Core程序集,然后运行PermissionBuilder.tt(右键点击tt文件,运行自定义工具)
清理
待所有AbpAuthorizeAttribute中用到的权限字符串常量(如标在TenantAppService上的[AbpAuthorize(PermissionNames.Pages_Tenants)])都替换成T4自动生成的以后,就可以删除Authorization目录下的PermissionNames.cs了。
同时可以清理DemoAuthorizationProvider中SetPermissions方法中原有的代码,统一全部调用BuilderUtils.Build。
感谢
感谢曾经的同事 @菜刀和板砖 提供本文关键实现。
[2017-11-21]Abp系列——T4应用:权限树定义的更多相关文章
- 2017/11/21 Leetcode 日记
2017/11/21 Leetcode 日记 496. Next Greater Element I You are given two arrays (without duplicates) num ...
- Android系统编程入门系列之应用权限的定义与申请
在之前关于应用内数据本地保存为文件时,曾提到应用需要申请外部存储设备的读写权限才能访问外部存储中的文件.那么针对某一种权限,应用程序具体应该怎么申请使用呢?本文将详细介绍. 应用中的权限主要分为两类, ...
- 2017.11.21 查询某个字段为null的记录
注意,不使用 = null, 而是 is null. select fd_username, fd_tenantid, fd_validity from t_user WHERE fd_validit ...
- 2017.11.21 postgre更新时需要联合其他表的信息
现在需要更新t_user表,但是前台传来的参数 tenant_name 并不在这个表中,需要联合另一个表t_tenant. 要注意的一点是:set后面的字段不要写成 u.fd_validity,否则会 ...
- 2017.11.21 基于JSP+Servlet+JavaBean实现复数运算(二)
代码的实现 最基本的MVC模式 //input.jsp 输入界面 <%@ page language="java" import="java.util.*" ...
- 2017.11.17 C++系列---用malloc动态给c++二维数组的申请与释放操作
方法一:利用二级指针申请一个二维数组. #include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态 ...
- 第33次Scrum会议(11/21)【欢迎来怼】
一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/21 11:35~11:57,总计22min.地点:东北 ...
- ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...
- 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录
ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...
随机推荐
- weblogic的集群与配置图文方法
一.Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat1, tomcat2,使用Apache HttpServer做请求派发 ...
- mac下virtualenv使用
1 sudo pip install virtualenv 安装 2 找一合适目录装虚拟环境 virtualenv virzhongguo 3 激活虚拟环境 source virzhongguo/ ...
- OWASP Dependency-Check插件介绍及使用
1.Dependency-Check可以检查项目依赖包存在的已知.公开披露的漏洞.目前良好的支持Java和.NET:Ruby.Node.js.Python处于实验阶段:仅支持通过(autoconf a ...
- Linux系统救援模式应用:单用户模式找回密码
利用Linux系统救援模式找回密码 方法一: 开机时手要快按任意键,因为默认时间5s grub菜单,只有一个内核,没什么好上下选的,按e键.升级了系统或安装了Xen虚拟化后,就会有多个显示. 接下来显 ...
- dubbo服务接口开发者必备调试利器,你值得拥有
dubbo服务接口开发者必备调试利器,你值得拥有 学习了:https://my.oschina.net/vboxtop/blog/1524290 找到了:http://www.vbox.top/?fr ...
- csdn开源夏令营-ospaf中期报告
1.背景 随着将中期的代码托管到CSDN的平台上,ospaf(开源项目成熟度分析工具)已经有了小小的雏形.当然还远远不够. 首先还是要感谢这次活动组织方CSDN,感觉挺有G ...
- nfs部署和优化 -2
客户端: cat /etc/passwd 显示用户 weifeng 500 服务端: vim /etc/exports /mnt 192.168.1.105(rw,sync,all_squash, ...
- CSS解决无空格太长的字母,数字不会自己主动换行的问题
事实上非常easy,代码例如以下所看到的,注意 Style: <div class="detail_title" style="word-break: break- ...
- XXE攻击
1.背景 现在很多应用都存在XXE(XML External Entity attack)漏洞,就是xml外部实体攻击,比如facebook,很多XML的解析器默认是含有XXE漏洞的. 2.xml的定 ...
- VESA-ADV7123-SOCKIT-DE2115
/*--VGA Timing--Horizontal :-- ______________ _____________-- | | |--_______________| VIDEO |_______ ...