zoukankan      html  css  js  c++  java
  • [2017-11-21]Abp系列——T4应用:权限树定义


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

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

    先看成果

    成果是:

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

    截图:

    abp_t4_perms

    开工

    还是从Personball.Demo项目开始,我从dev分支新建了一个feature_t4_permissions
    展开Personball.Demo.Core程序集,按下述步骤操作

    安装包,获取相关文件

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

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

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

    1. AuthorizationBuildersPermissionsSample.json
    2. AuthorizationBuildersBuilderUtils.cs
    3. AuthorizationBuildersPermissionBuilder.tt
    4. AuthorizationBuildersT4MultipleOutputManager.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. 打开AuthorizationDemoAuthorizationProvider.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

    感谢

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

  • 相关阅读:
    【BZOJ 2120】 数颜色
    【BZOJ 1878】 HH的项链
    【BZOJ 2038】小Z的袜子
    【BZOJ 2724】 蒲公英
    【POJ 2482】 Stars in Your Windows
    【POJ 2182】Lost Cows
    __align(num) 分析
    C# 获取图片某像素点RGB565值
    基于OpenCV的火焰检测(三)——HSI颜色判据
    基于OpenCV的火焰检测(一)——图像预处理
  • 原文地址:https://www.cnblogs.com/personball/p/7875700.html
Copyright © 2011-2022 走看看