多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
>[warning] 这里我们以[NEWLEARN_VIEW]权限来分析 ### 代码追溯分析 > 我们检查整个项目中是否有此权限, 搜索[NEWLEARN_VIEW], > 在[OFBIZ_HOME/specialpurpose/newlearn/data/NewLearnSecurityPermissionSeedData.xml]发现此权限, 定义如下: > ~~~ > <SecurityPermission description="View operations in the NewLearn Component." permissionId="NEWLEARN_VIEW"/> > ~~~ > > 这里说明一下: 在这个文件里有一个[NEWLEARN_ADMIN]权限的定义, 而这个权限其实是包含了[VIEW、CREATE、UPDATE、DELETE]几个颗粒的权限的. > 也就是说, 只要[admin]用户所在的用户权限组中有[NEWLEARN_VIEW]或[NEWLEARN_ADMIN]其中任意一个权限都行. > > 全项目搜索[NEWLEARN_VIEW], 发下权限数据关联定义如下: > 在[OFBIZ_HOME/specialpurpose/newlearn/data/NewLearnSecurityGroupDemoData.xml]中有如下定义 > - ~~~ > <SecurityGroupPermission groupId="FLEXADMIN" permissionId="NEWLEARN_VIEW"/> > <SecurityGroupPermission groupId="VIEWADMIN" permissionId="NEWLEARN_VIEW"/> > ~~~ > 我们发现有两个权限组都被赋予了可访问权限, 我们再看看另外一个权限. > > 全项目搜索[NEWLEARN_ADMIN], 发下权限数据关联定义如下: > 在[OFBIZ_HOME/specialpurpose/newlearn/data]目录下有两个文件中有定义 > - 在[NewLearnSecurityPermissionSeedData.xml]中有如下定义 > - ~~~ > <SecurityGroupPermission groupId="SUPER" permissionId="NEWLEARN_ADMIN"/> > ~~~ > - 在[NewLearnSecurityGroupDemoData.xml]中有如下定义 > - ~~~ > <SecurityGroupPermission groupId="FULLADMIN" permissionId="NEWLEARN_ADMIN"/> > <SecurityGroupPermission groupId="FLEXADMIN" permissionId="NEWLEARN_VIEW"/> > <SecurityGroupPermission groupId="VIEWADMIN" permissionId="NEWLEARN_VIEW"/> > <SecurityGroupPermission groupId="BIZADMIN" permissionId="NEWLEARN_ADMIN"/> > ~~~ > 在上述两个文件中我们发现有很多权限组都被赋予了可访问权限. > > 此时再搜索[admin]用户被关联了哪些权限组, 经过搜索列表如下 > ~~~ > <UserLoginSecurityGroup groupId="FULLADMIN" userLoginId="admin" fromDate="2001-01-01 12:00:00.0"/> > <UserLoginSecurityGroup groupId="MYPORTAL_EMPLOYEE" userLoginId="admin" fromDate="2000-01-01 00:00:00.0"/> > ~~~ > 我们发现[admin]用户有[FULLADMIN]权限组, 而这个权限组又关联了[NEWLEARN_ADMIN]权限, 这就意味着[admin]用户被赋予了[NEWLEARN_ADMIN]权限, 即被赋予了[VIEW、CREATE、UPDATE、DELETE]几个颗粒的权限. > 所以[admin]账户根据这个配置分析, 已经正常的授予了[NEWLEARN_VIEW]权限的. > ### 未导入到数据库的异常 > 如果根据上面的过程分析[admin]账户是有[NEWLEARN_VIEW]权限的, 但是在权限检查时依然返回[false]的话, 就需要对比项目和数据库的实际数据了. > 其可能的原因是: 这个权限配置并没有被导入到数据库. > 我们回顾下运行项目的[ofbiz]指令, 这个指令整个过程都没有涉及到任何数据的导入, 所以, 即使我们找到了权限配置的数据, 但是在数据库其实是没有这些配置数据的. > 如果是这样的话, 我们需要按照[OFBiz中怎么手工导入Data.xml数据](OFBiz中怎么手工导入Data.xml数据.md)操作, 导入权限数据. > 导入顺序如下: (不能乱顺序, 因为有表数据外键依赖) > 1. NewLearnSecurityPermissionSeedData.xml > 2. NewLearnSecurityGroupDemoData.xml