本系列目录:Abp介绍和经验分享-目录

今天介绍下,如何使用T4根据json文件自动生成权限定义。

先看成果

成果是:

  1. 要新增一个权限定义时,打开Json文件,找到目标节点,加个权限定义;
  2. 生成下Core程序集(因为Json文件都是嵌入式资源文件);
  3. 跑一遍T4,ok,新增的权限名常量有了,权限树上也加了新权限。

截图:

开工

还是从Personball.Demo项目开始,我从dev分支新建了一个feature_t4_permissions

展开Personball.Demo.Core程序集,按下述步骤操作

安装包,获取相关文件

打开程序包管理器控制台,默认项目选中Personball.Demo.Core,执行如下命令,安装获取相关文件:

//安装过程中会提示是否执行T4,请取消,还有地方需要修改
Install-Package Abplus.T4.PermissionsFromJson

该nuget包带来如下几个文件:

  1. Authorization\Builders\Permissions\Sample.json
  2. Authorization\Builders\BuilderUtils.cs
  3. Authorization\Builders\PermissionBuilder.tt
  4. Authorization\Builders\T4MultipleOutputManager.ttinclude

几处修正

  1. 选中Sample.json,F4查看属性,确保json文件的属性是嵌入的资源
  2. 打开BuilderUtils.cs,将【YourCompany.YourProject】替换成Personball.Demo
  3. 打开PermissionBuilder.tt,将【YourCompany.YourProject】替换成Personball.Demo
  4. 打开PermissionBuilder.tt,修正你所使用的Newtonsoft.Json的引用路径(版本号)
  5. 打开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了。

同时可以清理DemoAuthorizationProviderSetPermissions方法中原有的代码,统一全部调用BuilderUtils.Build

感谢

感谢曾经的同事 @菜刀和板砖 提供本文关键实现。

[2017-11-21]Abp系列——T4应用:权限树定义的更多相关文章

  1. 2017/11/21 Leetcode 日记

    2017/11/21 Leetcode 日记 496. Next Greater Element I You are given two arrays (without duplicates) num ...

  2. Android系统编程入门系列之应用权限的定义与申请

    在之前关于应用内数据本地保存为文件时,曾提到应用需要申请外部存储设备的读写权限才能访问外部存储中的文件.那么针对某一种权限,应用程序具体应该怎么申请使用呢?本文将详细介绍. 应用中的权限主要分为两类, ...

  3. 2017.11.21 查询某个字段为null的记录

    注意,不使用 = null, 而是 is null. select fd_username, fd_tenantid, fd_validity from t_user WHERE fd_validit ...

  4. 2017.11.21 postgre更新时需要联合其他表的信息

    现在需要更新t_user表,但是前台传来的参数 tenant_name 并不在这个表中,需要联合另一个表t_tenant. 要注意的一点是:set后面的字段不要写成 u.fd_validity,否则会 ...

  5. 2017.11.21 基于JSP+Servlet+JavaBean实现复数运算(二)

    代码的实现 最基本的MVC模式 //input.jsp 输入界面 <%@ page language="java" import="java.util.*" ...

  6. 2017.11.17 C++系列---用malloc动态给c++二维数组的申请与释放操作

    方法一:利用二级指针申请一个二维数组. #include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态 ...

  7. 第33次Scrum会议(11/21)【欢迎来怼】

    一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/21 11:35~11:57,总计22min.地点:东北 ...

  8. ABP(现代ASP.NET样板开发框架)系列之11、ABP领域层——仓储(Repositories)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之11.ABP领域层——仓储(Repositories) ABP是“ASP.NET Boilerplate Proj ...

  9. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

随机推荐

  1. 【原创】Android View框架总结(三)View工作原理

    测量/布局/绘制顺序 如何引起View的测量/布局/绘制? PerformTraversales() ViewRoot View工作基本流程  MeasureSpec SpecMode Measure ...

  2. Apache OFBIZ高速上手(三)--文件夹&amp;&amp;配置文件介绍

    1.OFBiz简单介绍,什么是OFBiz           OFBiz is an Apache Software Foundation top level project.           A ...

  3. GIS可视化——聚散图

    一.简介 随着计算机的发展,浏览器的不断进步与完善,现今大部分浏览渲染效率有了很大的改善, 但是由于浏览器厂商的不同,浏览器种类繁多,性能不一,并且很多用户还使用着不少老的浏览, 那些如IE6.7等的 ...

  4. AutoCAD2004启动时出现fail to get CommcntrController的怎么办

    解决AutoCAD2004启动时出现fail to get CommcntrController的问题! 2009-02-01 18:06 以前安装AutoCAD2004的时候可以用正常使用,后来又装 ...

  5. leetcode-Symmetric Tree 对称树

    Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...

  6. 怎样推断server为虚拟机还是物理真机?

    dmidecode |grep -A20 "Memory Device$"|sed -n -e'/Locator/p' -e '/Size/p'|grep -v "Ban ...

  7. JSON 值转换

    var Txt = '{"a":"1","b":"5","c":"5",&quo ...

  8. .NET面试题汇总

    目录 本次给大家介绍的是我收集以及自己个人保存一些.NET面试题 简介 1.C# 值类型和引用类型的区别 2.如何使得一个类型可以在foreach 语句中使用 3.sealed修饰的类有什么特点 4. ...

  9. 为备考二级C语言做的代码练习---辅导资料《C语言经典编程282例》--(1)

    因为二级考试的时候用的C语言编译器是VC++6.0 真是日了狗了 用这个编译器 这是我第2个C编译器吧,第一个用的是啊哈C编译器..第二个是VS++6.0 然后在win下用VS2013感觉挺不错的 毕 ...

  10. freemark2pdf

    freemarker+ITextRenderer 生成html转pdf 博客分类: ITextRenderer ITextRenderer  网上已经有比较多的例子 写这个 但是很多都是简单的 dem ...