提交 feea6b9a 编写于 作者: ibizdev's avatar ibizdev

ibizdev提交

上级 1ec8ec0c
*2020-4-29*
初始化文件
<template> <template>
<codelist v-if="tag" :tag="tag" :value="value" :codelistType="codelistType" :renderMode="renderMode" :valueSeparator="valueSeparator" :textSeparator="textSeparator"></codelist> <codelist v-if="tag" :tag="tag" :value="value" :codelistType="codelistType" :renderMode="renderMode" :valueSeparator="valueSeparator" :textSeparator="textSeparator"></codelist>
<app-upload-file-info v-else-if="Object.is(this.editorType,'PICTURE') || Object.is(this.editorType,'PICTURE_ONE') || Object.is(this.editorType,'FILEUPLOADER')" :value="value" :name="name"></app-upload-file-info>
<span class="app-span" v-else >{{text}}</span> <span class="app-span" v-else >{{text}}</span>
</template> </template>
...@@ -18,6 +19,14 @@ export default class DropDownList extends Vue { ...@@ -18,6 +19,14 @@ export default class DropDownList extends Vue {
*/ */
@Prop() public value?: any; @Prop() public value?: any;
/**
* 当前表单项名称
*
* @type {*}
* @memberof AppSpan
*/
@Prop() public name?: any;
/** /**
* 代码表标识 * 代码表标识
* *
...@@ -99,15 +108,6 @@ export default class DropDownList extends Vue { ...@@ -99,15 +108,6 @@ export default class DropDownList extends Vue {
public load(){ public load(){
if(!this.value || this.tag){ if(!this.value || this.tag){
return; //代码表走codelist组件 return; //代码表走codelist组件
} else if(Object.is(this.editorType,'PICTURE') || Object.is(this.editorType,'PICTURE_ONE') || Object.is(this.editorType,'FILEUPLOADER')){
let files: any[] = JSON.parse(this.value);
let names: any[] = [];
if(files.length && files.length > 0){
files.forEach((item:any) => {
names.push(item.name);
});
this.text = names.join(',');
}
}else{ }else{
this.text = this.value; this.text = this.value;
} }
......
...@@ -15,5 +15,6 @@ export default { ...@@ -15,5 +15,6 @@ export default {
permissionid: '系统资源标识', permissionid: '系统资源标识',
createdate: '建立时间', createdate: '建立时间',
updatedate: '更新时间', updatedate: '更新时间',
permissiontype: '资源类型',
}, },
}; };
\ No newline at end of file
...@@ -14,5 +14,6 @@ export default { ...@@ -14,5 +14,6 @@ export default {
permissionid: '系统资源标识', permissionid: '系统资源标识',
createdate: '建立时间', createdate: '建立时间',
updatedate: '更新时间', updatedate: '更新时间',
permissiontype: '资源类型',
}, },
}; };
\ No newline at end of file
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
</i-col> </i-col>
<i-col v-show="detailsModel.sys_permissionid.visible" :style="{}" :lg="{ span: 24, offset: 0 }"> <i-col v-show="detailsModel.sys_permissionid.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='sys_permissionid' :itemRules="this.rules.sys_permissionid" class='' :caption="$t('entities.sys_permission.main_form.details.sys_permissionid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_permissionid.error" :isEmptyCaption="false" labelPos="LEFT"> <app-form-item name='sys_permissionid' :itemRules="this.rules.sys_permissionid" class='' :caption="$t('entities.sys_permission.main_form.details.sys_permissionid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_permissionid.error" :isEmptyCaption="false" labelPos="LEFT">
<app-span :value="data.sys_permissionid" style=""></app-span> <app-span name='sys_permissionid'
:value="data.sys_permissionid" style=""></app-span>
</app-form-item> </app-form-item>
</i-col> </i-col>
......
...@@ -34,7 +34,8 @@ ...@@ -34,7 +34,8 @@
</i-col> </i-col>
<i-col v-show="detailsModel.type.visible" :style="{}" :lg="{ span: 24, offset: 0 }"> <i-col v-show="detailsModel.type.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='type' :itemRules="this.rules.type" class='' :caption="$t('entities.sys_role_permission.main_form.details.type')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.type.error" :isEmptyCaption="false" labelPos="LEFT"> <app-form-item name='type' :itemRules="this.rules.type" class='' :caption="$t('entities.sys_role_permission.main_form.details.type')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.type.error" :isEmptyCaption="false" labelPos="LEFT">
<app-span :value="data.type" tag='CLPermissionType' codelistType='STATIC' style=""></app-span> <app-span name='type'
:value="data.type" tag='CLPermissionType' codelistType='STATIC' style=""></app-span>
</app-form-item> </app-form-item>
</i-col> </i-col>
...@@ -65,7 +66,8 @@ ...@@ -65,7 +66,8 @@
</i-col> </i-col>
<i-col v-show="detailsModel.sys_role_permissionid.visible" :style="{}" :lg="{ span: 24, offset: 0 }"> <i-col v-show="detailsModel.sys_role_permissionid.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='sys_role_permissionid' :itemRules="this.rules.sys_role_permissionid" class='' :caption="$t('entities.sys_role_permission.main_form.details.sys_role_permissionid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_role_permissionid.error" :isEmptyCaption="false" labelPos="LEFT"> <app-form-item name='sys_role_permissionid' :itemRules="this.rules.sys_role_permissionid" class='' :caption="$t('entities.sys_role_permission.main_form.details.sys_role_permissionid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_role_permissionid.error" :isEmptyCaption="false" labelPos="LEFT">
<app-span :value="data.sys_role_permissionid" style=""></app-span> <app-span name='sys_role_permissionid'
:value="data.sys_role_permissionid" style=""></app-span>
</app-form-item> </app-form-item>
</i-col> </i-col>
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
</i-col> </i-col>
<i-col v-show="detailsModel.sys_roleid.visible" :style="{}" :lg="{ span: 24, offset: 0 }"> <i-col v-show="detailsModel.sys_roleid.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='sys_roleid' :itemRules="this.rules.sys_roleid" class='' :caption="$t('entities.sys_role.main_form.details.sys_roleid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_roleid.error" :isEmptyCaption="false" labelPos="LEFT"> <app-form-item name='sys_roleid' :itemRules="this.rules.sys_roleid" class='' :caption="$t('entities.sys_role.main_form.details.sys_roleid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_roleid.error" :isEmptyCaption="false" labelPos="LEFT">
<app-span :value="data.sys_roleid" style=""></app-span> <app-span name='sys_roleid'
:value="data.sys_roleid" style=""></app-span>
</app-form-item> </app-form-item>
</i-col> </i-col>
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
</i-col> </i-col>
<i-col v-show="detailsModel.sys_user_roleid.visible" :style="{}" :lg="{ span: 24, offset: 0 }"> <i-col v-show="detailsModel.sys_user_roleid.visible" :style="{}" :lg="{ span: 24, offset: 0 }">
<app-form-item name='sys_user_roleid' :itemRules="this.rules.sys_user_roleid" class='' :caption="$t('entities.sys_user_role.main_form.details.sys_user_roleid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_user_roleid.error" :isEmptyCaption="false" labelPos="LEFT"> <app-form-item name='sys_user_roleid' :itemRules="this.rules.sys_user_roleid" class='' :caption="$t('entities.sys_user_role.main_form.details.sys_user_roleid')" uiStyle="DEFAULT" :labelWidth="130" :isShowCaption="true" :error="detailsModel.sys_user_roleid.error" :isEmptyCaption="false" labelPos="LEFT">
<app-span :value="data.sys_user_roleid" style=""></app-span> <app-span name='sys_user_roleid'
:value="data.sys_user_roleid" style=""></app-span>
</app-form-item> </app-form-item>
</i-col> </i-col>
......
...@@ -135,6 +135,13 @@ public class SYS_PSDEOPPRIV extends EntityMP implements Serializable { ...@@ -135,6 +135,13 @@ public class SYS_PSDEOPPRIV extends EntityMP implements Serializable {
@JSONField(name = "updatedate" , format="yyyy-MM-dd HH:mm:ss") @JSONField(name = "updatedate" , format="yyyy-MM-dd HH:mm:ss")
@JsonProperty("updatedate") @JsonProperty("updatedate")
private Timestamp updatedate; private Timestamp updatedate;
/**
* 资源类型
*/
@TableField(value = "permissiontype")
@JSONField(name = "permissiontype")
@JsonProperty("permissiontype")
private String permissiontype;
...@@ -215,6 +222,13 @@ public class SYS_PSDEOPPRIV extends EntityMP implements Serializable { ...@@ -215,6 +222,13 @@ public class SYS_PSDEOPPRIV extends EntityMP implements Serializable {
this.permissionid = permissionid ; this.permissionid = permissionid ;
this.modify("permissionid",permissionid); this.modify("permissionid",permissionid);
} }
/**
* 设置 [资源类型]
*/
public void setPermissiontype(String permissiontype){
this.permissiontype = permissiontype ;
this.modify("permissiontype",permissiontype);
}
} }
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[权限/资源] 服务对象接口实现 * 实体[权限/资源] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_PERMISSIONServiceImpl")
public class SYS_PERMISSIONServiceImpl extends ServiceImpl<SYS_PERMISSIONMapper, SYS_PERMISSION> implements ISYS_PERMISSIONService { public class SYS_PERMISSIONServiceImpl extends ServiceImpl<SYS_PERMISSIONMapper, SYS_PERMISSION> implements ISYS_PERMISSIONService {
@Autowired @Autowired
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[系统菜单项] 服务对象接口实现 * 实体[系统菜单项] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_PSAPPMENUITEMServiceImpl")
public class SYS_PSAPPMENUITEMServiceImpl extends ServiceImpl<SYS_PSAPPMENUITEMMapper, SYS_PSAPPMENUITEM> implements ISYS_PSAPPMENUITEMService { public class SYS_PSAPPMENUITEMServiceImpl extends ServiceImpl<SYS_PSAPPMENUITEMMapper, SYS_PSAPPMENUITEM> implements ISYS_PSAPPMENUITEMService {
private int batchSize = 500; private int batchSize = 500;
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[实体数据操作标识] 服务对象接口实现 * 实体[实体数据操作标识] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_PSDEOPPRIVServiceImpl")
public class SYS_PSDEOPPRIVServiceImpl extends ServiceImpl<SYS_PSDEOPPRIVMapper, SYS_PSDEOPPRIV> implements ISYS_PSDEOPPRIVService { public class SYS_PSDEOPPRIVServiceImpl extends ServiceImpl<SYS_PSDEOPPRIVMapper, SYS_PSDEOPPRIV> implements ISYS_PSDEOPPRIVService {
private int batchSize = 500; private int batchSize = 500;
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[实体] 服务对象接口实现 * 实体[实体] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_PSSYSTEMServiceImpl")
public class SYS_PSSYSTEMServiceImpl extends ServiceImpl<SYS_PSSYSTEMMapper, SYS_PSSYSTEM> implements ISYS_PSSYSTEMService { public class SYS_PSSYSTEMServiceImpl extends ServiceImpl<SYS_PSSYSTEMMapper, SYS_PSSYSTEM> implements ISYS_PSSYSTEMService {
private int batchSize = 500; private int batchSize = 500;
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[系统角色] 服务对象接口实现 * 实体[系统角色] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_ROLEServiceImpl")
public class SYS_ROLEServiceImpl extends ServiceImpl<SYS_ROLEMapper, SYS_ROLE> implements ISYS_ROLEService { public class SYS_ROLEServiceImpl extends ServiceImpl<SYS_ROLEMapper, SYS_ROLE> implements ISYS_ROLEService {
@Autowired @Autowired
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[角色权限关系] 服务对象接口实现 * 实体[角色权限关系] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_ROLE_PERMISSIONServiceImpl")
public class SYS_ROLE_PERMISSIONServiceImpl extends ServiceImpl<SYS_ROLE_PERMISSIONMapper, SYS_ROLE_PERMISSION> implements ISYS_ROLE_PERMISSIONService { public class SYS_ROLE_PERMISSIONServiceImpl extends ServiceImpl<SYS_ROLE_PERMISSIONMapper, SYS_ROLE_PERMISSION> implements ISYS_ROLE_PERMISSIONService {
private int batchSize = 500; private int batchSize = 500;
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[系统用户] 服务对象接口实现 * 实体[系统用户] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_USERServiceImpl")
public class SYS_USERServiceImpl extends ServiceImpl<SYS_USERMapper, SYS_USER> implements ISYS_USERService { public class SYS_USERServiceImpl extends ServiceImpl<SYS_USERMapper, SYS_USER> implements ISYS_USERService {
@Autowired @Autowired
......
...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject; ...@@ -39,7 +39,7 @@ import com.alibaba.fastjson.JSONObject;
* 实体[用户角色关系] 服务对象接口实现 * 实体[用户角色关系] 服务对象接口实现
*/ */
@Slf4j @Slf4j
@Service @Service("SYS_USER_ROLEServiceImpl")
public class SYS_USER_ROLEServiceImpl extends ServiceImpl<SYS_USER_ROLEMapper, SYS_USER_ROLE> implements ISYS_USER_ROLEService { public class SYS_USER_ROLEServiceImpl extends ServiceImpl<SYS_USER_ROLEMapper, SYS_USER_ROLE> implements ISYS_USER_ROLEService {
private int batchSize = 500; private int batchSize = 500;
......
[ {
"predefineddatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}],
"entities":[
{ {
"dename":"SYS_ROLE_PERMISSION", "dename":"SYS_ROLE_PERMISSION",
"delogicname":"角色权限关系", "delogicname":"角色权限关系",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
, ,
{ {
...@@ -15,8 +16,7 @@ ...@@ -15,8 +16,7 @@
"delogicname":"权限/资源", "delogicname":"权限/资源",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
, ,
{ {
...@@ -24,8 +24,7 @@ ...@@ -24,8 +24,7 @@
"delogicname":"用户角色关系", "delogicname":"用户角色关系",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
, ,
{ {
...@@ -33,8 +32,7 @@ ...@@ -33,8 +32,7 @@
"delogicname":"系统用户", "delogicname":"系统用户",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
, ,
{ {
...@@ -42,8 +40,7 @@ ...@@ -42,8 +40,7 @@
"delogicname":"系统角色", "delogicname":"系统角色",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
, ,
{ {
...@@ -51,8 +48,7 @@ ...@@ -51,8 +48,7 @@
"delogicname":"系统菜单项", "delogicname":"系统菜单项",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
, ,
{ {
...@@ -60,8 +56,9 @@ ...@@ -60,8 +56,9 @@
"delogicname":"实体数据操作标识", "delogicname":"实体数据操作标识",
"sysmoudle":{"id":"UAA","name":"uaa"}, "sysmoudle":{"id":"UAA","name":"uaa"},
"dedataset":[{"id":"Default","name":"默认数据集"}], "dedataset":[{"id":"Default","name":"默认数据集"}],
"dedatarange":[{"id":"ALL","name":"全部数据"},{"id":"CURORG","name":"当前单位"},{"id":"PORG","name":"上级单位"},{"id":"SORG","name":"下级单位"},{"id":"CURORGDEPT","name":"当前部门"},{"id":"PORGDEPT","name":"上级部门"},{"id":"SORGDEPT","name":"下级部门"}], "deaction":[{"id":"CREATE","name":"新建","type":"BUILTIN"},{"id":"UPDATE","name":"编辑","type":"BUILTIN"},{"id":"READ","name":"读取","type":"BUILTIN"},{"id":"DELETE","name":"删除","type":"BUILTIN"},{"id":"CUSTOM","name":"自定义行为","type":"USERCUSTOM"}]
"deprivs":[{"id":"READ","name":"READ"},{"id":"CREATE","name":"CREATE"},{"id":"UPDATE","name":"UPDATE"},{"id":"DELETE","name":"DELETE"}]
} }
] ]
}
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
<!--输出实体[SYS_PSDEOPPRIV]数据结构 --> <!--输出实体[SYS_PSDEOPPRIV]数据结构 -->
<changeSet author="a_A_5d9d78509" id="tab-sys_psdeoppriv-42-1"> <changeSet author="a_A_5d9d78509" id="tab-sys_psdeoppriv-51-1">
<createTable tableName="IBZPSDEOPPRIV"> <createTable tableName="IBZPSDEOPPRIV">
<column name="SYS_PSDEOPPRIVID" remarks="" type="VARCHAR(200)"> <column name="SYS_PSDEOPPRIVID" remarks="" type="VARCHAR(200)">
<constraints primaryKey="true" primaryKeyName="PK_SYS_PSDEOPPRIV_SYS_PSDEOPPR"/> <constraints primaryKey="true" primaryKeyName="PK_SYS_PSDEOPPRIV_SYS_PSDEOPPR"/>
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
</column> </column>
<column name="UPDATEDATE" remarks="" type="DATETIME"> <column name="UPDATEDATE" remarks="" type="DATETIME">
</column> </column>
<column name="PERMISSIONTYPE" remarks="" type="VARCHAR(100)">
</column>
</createTable> </createTable>
</changeSet> </changeSet>
<!--输出实体[SYS_USER]数据结构 --> <!--输出实体[SYS_USER]数据结构 -->
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<!--数据查询[Default]--> <!--数据查询[Default]-->
<sql id="Default" databaseId="mysql"> <sql id="Default" databaseId="mysql">
<![CDATA[ SELECT t1.`CREATEDATE`, t1.`PERMISSIONID`, t1.`PSDATAENTITYID`, t1.`PSDATAENTITYNAME`, t1.`PSDEDATARANGEID`, t1.`PSDEDATARANGENAME`, t1.`PSDEDATASETID`, t1.`PSDEDATASETNAME`, t1.`PSSYSMODULEID`, t1.`PSSYSMODULENAME`, t1.`PSSYSTEMID`, t1.`SYS_PSDEOPPRIVID`, t1.`SYS_PSDEOPPRIVNAME`, t1.`UPDATEDATE` FROM `IBZPSDEOPPRIV` t1 <![CDATA[ SELECT t1.`CREATEDATE`, t1.`PERMISSIONID`, t1.`PERMISSIONTYPE`, t1.`PSDATAENTITYID`, t1.`PSDATAENTITYNAME`, t1.`PSDEDATARANGEID`, t1.`PSDEDATARANGENAME`, t1.`PSDEDATASETID`, t1.`PSDEDATASETNAME`, t1.`PSSYSMODULEID`, t1.`PSSYSMODULENAME`, t1.`PSSYSTEMID`, t1.`SYS_PSDEOPPRIVID`, t1.`SYS_PSDEOPPRIVNAME`, t1.`UPDATEDATE` FROM `IBZPSDEOPPRIV` t1
]]> ]]>
</sql> </sql>
......
...@@ -137,6 +137,14 @@ public class SYS_PSDEOPPRIVDTO extends DTOBase implements Serializable { ...@@ -137,6 +137,14 @@ public class SYS_PSDEOPPRIVDTO extends DTOBase implements Serializable {
@JsonProperty("updatedate") @JsonProperty("updatedate")
private Timestamp updatedate; private Timestamp updatedate;
/**
* 属性 [PERMISSIONTYPE]
*
*/
@JSONField(name = "permissiontype")
@JsonProperty("permissiontype")
private String permissiontype;
/** /**
* 设置 [SYS_PSDEOPPRIVNAME] * 设置 [SYS_PSDEOPPRIVNAME]
...@@ -226,6 +234,14 @@ public class SYS_PSDEOPPRIVDTO extends DTOBase implements Serializable { ...@@ -226,6 +234,14 @@ public class SYS_PSDEOPPRIVDTO extends DTOBase implements Serializable {
this.modify("permissionid",permissionid); this.modify("permissionid",permissionid);
} }
/**
* 设置 [PERMISSIONTYPE]
*/
public void setPermissiontype(String permissiontype){
this.permissiontype = permissiontype ;
this.modify("permissiontype",permissiontype);
}
} }
package cn.ibizlab.util.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@AllArgsConstructor
public class FileItem
{
private String id;
private String name;
private long size;
private String ext;
}
package cn.ibizlab.util.rest;
import cn.ibizlab.util.domain.FileItem;
import cn.ibizlab.util.service.FileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@Slf4j
public class FileController
{
@Autowired
private FileService fileService;
@PostMapping(value = "${ibiz.uploadpath.path:ibizutil/upload}")
public ResponseEntity<FileItem> upload(@RequestParam("file") MultipartFile multipartFile){
return ResponseEntity.ok().body(fileService.saveFile(multipartFile));
}
private final String defaultdownloadpath="ibizutil/download/{id}";
protected String getDefaultdownloadpath(){
return defaultdownloadpath;
}
@GetMapping(value = "${ibiz.file.downloadpath:"+defaultdownloadpath+"}")
@ResponseStatus(HttpStatus.OK)
public void download(@PathVariable String id, HttpServletResponse response){
File file= fileService.getFile(id);
response.setHeader("Content-Disposition", "attachment;filename="+getFileName(file.getName()));
this.sendRespose(response, file);
}
protected void sendRespose(HttpServletResponse response, File file){
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(file));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
}
catch (Exception e) {
//throw e;
}
finally {
if (bis != null) {
try {
bis.close();
}
catch (IOException e) {
}
}
if (bos != null) {
try {
bos.close();
}
catch (IOException e) {
}
}
}
}
protected String getFileName(String fileName){
try {
return new String(fileName.getBytes("utf-8"),"iso8859-1");//防止中文乱码
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return fileName;
}
}
\ No newline at end of file
...@@ -4,14 +4,19 @@ import com.alibaba.fastjson.JSONArray; ...@@ -4,14 +4,19 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.ibizlab.util.annotation.DEField;
import cn.ibizlab.util.domain.EntityBase; import cn.ibizlab.util.domain.EntityBase;
import cn.ibizlab.util.enums.DEPredefinedFieldType;
import cn.ibizlab.util.filter.QueryWrapperContext; import cn.ibizlab.util.filter.QueryWrapperContext;
import cn.ibizlab.util.helper.DEFieldCacheMap;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.access.PermissionEvaluator; import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.io.Serializable; import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -31,146 +36,148 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -31,146 +36,148 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* 表格权限检查 :用于检查当前用户是否拥有表格数据的读取、删除权限 * 表格权限检查 :用于检查当前用户是否拥有表格数据的读取、删除权限
* *
* @param authentication * @param authentication
* @param obj_action 表格行为,如:[READ,DELETE] * @param deAction 表格行为,如:[READ,DELETE]
* @param grid_param 表格参数,如:当前表格所处实体(EntityName)、表格删除的数据主键(srfkeys) * @param gridParam 表格参数,如:当前表格所处实体(EntityName)、表格删除的数据主键(srfkeys)
* @return true/false true则允许当前行为,false拒绝行为 * @return true/false true则允许当前行为,false拒绝行为
*/ */
@Override @Override
public boolean hasPermission(Authentication authentication, Object obj_action, Object grid_param) { public boolean hasPermission(Authentication authentication, Object deAction, Object gridParam) {
//未开启权限校验、超级管理员则不进行权限检查
if(AuthenticationUser.getAuthenticationUser().getSuperuser()==1 || !enablePermissionValid) if(AuthenticationUser.getAuthenticationUser().getSuperuser()==1 || !enablePermissionValid)
return true; //系统没开启权限、超级管理员 两种情况不进行权限检查 return true;
try{
String action = ""; String action = "";
if (deAction instanceof String)
if (obj_action instanceof String) action = (String) deAction;
action = (String) obj_action;
if (StringUtils.isEmpty(action)) if (StringUtils.isEmpty(action))
return false; return false;
JSONObject permissionList= AuthenticationUser.getAuthenticationUser().getPermisionList();//获取权限列表 //获取当前用户权限列表
JSONObject userPermission= AuthenticationUser.getAuthenticationUser().getPermisionList();
if(permissionList==null) if(userPermission==null)
return false; return false;
List param_list = (ArrayList) grid_param; List gridParamList = (ArrayList) gridParam;
if(action.equals("DELETE")){ //grid delete
if(obj_action.equals("DELETE")){ //表格删除权限校验 //准备参数
Object srfkey =param_list.get(0); Object srfKey =gridParamList.get(0);
EntityBase cur_entity = (EntityBase) param_list.get(1); EntityBase entity = (EntityBase) gridParamList.get(1);
String entityName = cur_entity.getClass().getSimpleName(); String entityName = entity.getClass().getSimpleName();
ServiceImpl service= SpringContextHolder.getBean(String.format("%s%s",getBeanName(entityName),"ServiceImpl"));//获取当前实体service
JSONObject formDataAbility=permissionList.getJSONObject("dataAbility-form");//由于表格删除是不跟着dataSet走,所以此处走form获取权限 //获取实体行为权限信息
Map<String,String> permissionField=getPermissionField(cur_entity);//获取系统预置属性列表 JSONObject permissionList=userPermission.getJSONObject("deActionPermission");
String selectCond=generatePermissionSQLForm(formDataAbility,entityName,action,srfkey,permissionField);//拼接权限条件
if(StringUtils.isEmpty(selectCond)) //检查是否有操作权限[create.update.delete.read]
if(!validHasPermission(permissionList,entityName,action)){
return false;
}
//检查是否有数据权限[单行删除]
ServiceImpl service= SpringContextHolder.getBean(String.format("%s%s",entityName,"ServiceImpl"));//获取实体service对象
Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性
String permissionSQL=getPermissionSQLById(permissionList,entityName,action,srfKey,permissionField);//获取权限SQL
if(StringUtils.isEmpty(permissionSQL))
return false; return false;
QueryWrapper permissionCond=getPermissionCond(selectCond,permissionField); QueryWrapper permissionWrapper=getPermissionWrapper(permissionSQL);//构造权限条件
return testDataAccess(service,permissionCond);//执行权限检查 return testDataAccess(service,permissionWrapper);//执行权限检查
} }
else{ //表格查询权限校验 else{ //grid fetch
//准备参数
Object searchContext=gridParamList.get(0);
String dataSet=String.valueOf(gridParamList.get(1));
EntityBase entity = (EntityBase) gridParamList.get(2);
String entityName = entity.getClass().getSimpleName();
Object searchContext=param_list.get(0); //获取数据集权限信息
String dataSet=String.valueOf(param_list.get(1)); JSONObject permissionList=userPermission.getJSONObject("deDataSetPermission");
EntityBase cur_entity = (EntityBase) param_list.get(2);
String entityName = cur_entity.getClass().getSimpleName();
if(StringUtils.isEmpty(entityName)|| StringUtils.isEmpty(dataSet)|| StringUtils.isEmpty(action)) if(StringUtils.isEmpty(entityName)|| StringUtils.isEmpty(dataSet)|| StringUtils.isEmpty(action))
return false; return false;
JSONObject gridDataAbility=permissionList.getJSONObject("dataAbility-grid");//获取表格的权限数据 //检查是否有操作权限[create.update.delete.read]
Map<String,String> permissionField=getPermissionField(cur_entity);//获取系统预置属性列表 if(!validHasPermission(permissionList,entityName,dataSet,action)){
String selectCond=generatePermissionSQLGrid(gridDataAbility,entityName,action,dataSet,permissionField,null);//拼接权限条件
if(StringUtils.isEmpty(selectCond))
return false; return false;
filterDataAccess(searchContext,selectCond);//过滤出权限内的数据
} }
return true;
}catch (Exception e){ Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性
throw new RuntimeException("系统在进行权限检查时出现异常,原因为:"+e); String permissionSQL=getPermissionSQLByList(permissionList,entityName,action,dataSet,permissionField);//获取权限SQL
if(StringUtils.isEmpty(permissionSQL))
return false;
fillPermissionSQL(searchContext,permissionSQL);//将权限SQL添加到searchContext中,过滤出权限内数据
} }
return true;
} }
/** /**
* 表单权限检查 :用于检查当前用户是否拥有表单的新建、编辑、删除权限 * 表单权限检查 :用于检查当前用户是否拥有表单的新建、编辑、删除权限
* *
* @param authentication * @param authentication
* @param srfkey 当前操作数据的主键 * @param srfKey 当前操作数据的主键
* @param action 当前操作行为:如:[READ、UPDATE、DELETE] * @param action 当前操作行为:如:[READ、UPDATE、DELETE]
* @param cur_entity 当前操作的实体对象 * @param cur_entity 当前操作的实体对象
* @return true/false true则允许当前行为,false拒绝行为 * @return true/false true则允许当前行为,false拒绝行为
*/ */
@Override @Override
public boolean hasPermission(Authentication authentication, Serializable srfkey, String action, Object cur_entity) { public boolean hasPermission(Authentication authentication, Serializable srfKey, String action, Object cur_entity) {
//未开启权限校验、超级管理员则不进行权限检查
if(AuthenticationUser.getAuthenticationUser().getSuperuser()==1 || !enablePermissionValid) if(AuthenticationUser.getAuthenticationUser().getSuperuser()==1 || !enablePermissionValid)
return true; //系统没开启权限、超级管理员 两种情况不进行权限检查 return true;
boolean isPermission;
EntityBase entity = null; EntityBase entity = null;
if (cur_entity instanceof EntityBase) if (cur_entity instanceof EntityBase)
entity = (EntityBase) cur_entity; entity = (EntityBase) cur_entity;
if (StringUtils.isEmpty(entity)) if (StringUtils.isEmpty(entity))
return false; return false;
try { JSONObject userPermission= AuthenticationUser.getAuthenticationUser().getPermisionList();
String entityName = entity.getClass().getSimpleName(); //实体名 JSONObject permissionList=userPermission.getJSONObject("deActionPermission");
if(action.equals("CREATE")){ //表单新建权限校验 String entityName = entity.getClass().getSimpleName();
JSONObject permissionList= AuthenticationUser.getAuthenticationUser().getPermisionList();//获取权限列表
JSONObject formDataAbility=permissionList.getJSONObject("dataAbility-form");//获取表单的权限数据 if(action.equals("CREATE")){
return isFormCreatePermission(formDataAbility,entityName,action);//拼接权限条件 return validHasPermission(permissionList,entityName,action);
} }
else{ else{
//表单编辑、查询权限校验 //拥有全部数据访问权限时,则跳过权限检查
ServiceImpl service= SpringContextHolder.getBean(String.format("%s%s",getBeanName(entityName),"ServiceImpl"));//获取当前实体service if(isAllData(permissionList,entityName,action)){
JSONObject permissionList= AuthenticationUser.getAuthenticationUser().getPermisionList();//获取权限列表
JSONObject formDataAbility=permissionList.getJSONObject("dataAbility-form");//获取表单的权限数据
if(isAllData(formDataAbility,entityName,action)){//若为全部数据则直接返回,不再进行校验
return true; return true;
} }
Map<String,String> permissionField=getPermissionField(entity);//获取系统预置属性 //检查是否有操作权限[create.update.delete.read]
String selectCond=generatePermissionSQLForm(formDataAbility,entityName,action,srfkey,permissionField);//根据uaa中分配的权限拼接where条件 if(!validHasPermission(permissionList,entityName,action)){
if(StringUtils.isEmpty(selectCond))
return false; return false;
QueryWrapper permissionCond=getPermissionCond(selectCond,permissionField);
isPermission=testDataAccess(service,permissionCond);//执行权限检查
} }
}catch (Exception e){ //检查是否有数据权限
throw new RuntimeException("系统在进行权限检查时出现异常,原因为:"+e); ServiceImpl service= SpringContextHolder.getBean(String.format("%s%s",entityName,"ServiceImpl"));
Map<String,String> permissionField=getPermissionField(entity);//获取组织、部门预置属性
String permissionSQL=getPermissionSQLById(permissionList,entityName,action,srfKey,permissionField);//获取权限SQL
if(StringUtils.isEmpty(permissionSQL))
return false;
QueryWrapper permissionWrapper=getPermissionWrapper(permissionSQL);//构造权限条件
return testDataAccess(service,permissionWrapper);//执行权限检查
} }
return isPermission;
} }
/** /**
* 判断是否包含全部数据 * 是否为全部数据
* @param formDataAbility * @param permissionList
* @param entityName * @param entityName
* @param action * @param action
* @return * @return
*/ */
private boolean isAllData(JSONObject formDataAbility, String entityName, String action) { private boolean isAllData(JSONObject permissionList, String entityName, String action) {
if(formDataAbility==null) if(permissionList==null)
return false;
if(!formDataAbility.containsKey(entityName))
return false;
JSONObject entityObj=formDataAbility.getJSONObject(entityName);//获取实体
if(!entityObj.containsKey(action))
return false; return false;
JSONArray entityOperation=entityObj.getJSONArray(action);//行为:read;insert... if(!permissionList.containsKey(entityName))
if(entityOperation.size()==0)
return false; return false;
JSONObject entity=permissionList.getJSONObject(entityName);
if(entityOperation.contains("ALL")){ //全部数据 if(entity.containsKey(action) && entity.getJSONArray(action).contains("ALL"))
return true; return true;
}
return false; return false;
} }
...@@ -179,40 +186,27 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -179,40 +186,27 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* @param gridDataAbility * @param gridDataAbility
* @param entityName * @param entityName
* @param action * @param action
* @param dataSet * @param dataSetName
* @param permissionField * @param permissionField
* @param srfkey
* @return * @return
*/ */
private String generatePermissionSQLGrid(JSONObject gridDataAbility, String entityName, String action, String dataSet, Map<String,String> permissionField,Object srfkey){ private String getPermissionSQLByList(JSONObject gridDataAbility, String entityName, String action, String dataSetName, Map<String,String> permissionField){
if(gridDataAbility==null)
return null;
if(!gridDataAbility.containsKey(entityName))
return null;
JSONObject entityObj=gridDataAbility.getJSONObject(entityName);//获取实体
if(!entityObj.containsKey(dataSet))
return null;
JSONObject dedatasetObject=entityObj.getJSONObject(dataSet);//获取实体数据集
if(!dedatasetObject.containsKey(action))
return null;
JSONArray entityOperation=dedatasetObject.getJSONArray(action);//行为:read;insert...
if(entityOperation.size()==0)
return null;
if(StringUtils.isEmpty(srfkey)) JSONObject entity=gridDataAbility.getJSONObject(entityName);//获取实体
return getPermissionCond(entityOperation,permissionField); //拼接权限条件-查询 JSONObject dataSet=entity.getJSONObject(dataSetName);//获取实体数据集
else JSONArray opprivList=dataSet.getJSONArray(action);//行为:read;insert...
return String.format(" (%s) AND (%sid='%s')",getPermissionCond(entityOperation,permissionField),srfkey); //拼接权限条件-删除 if(opprivList.size()==0)
return null;
return getPermissionSQL(opprivList,permissionField); //拼接权限条件-查询
} }
/** /**
* 表格拼接权限条件,过滤出权限数据 * 填充权限SQL
* @param targetDomainObject * @param targetDomainObject
* @param permissionCond * @param permissionCond
* @throws Exception
*/ */
private void filterDataAccess(Object targetDomainObject, String permissionCond) throws Exception{ private void fillPermissionSQL(Object targetDomainObject, String permissionCond){
if(targetDomainObject instanceof QueryWrapperContext){ if(targetDomainObject instanceof QueryWrapperContext){
QueryWrapperContext queryWrapperContext = (QueryWrapperContext) targetDomainObject; QueryWrapperContext queryWrapperContext = (QueryWrapperContext) targetDomainObject;
QueryWrapper queryWrapper = queryWrapperContext.getSelectCond(); QueryWrapper queryWrapper = queryWrapperContext.getSelectCond();
...@@ -220,52 +214,78 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -220,52 +214,78 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
} }
} }
/**
* 校验是否有访问实体行为能力
* @param permissionList 权限列表
* @param entityName 实体名称
* @param action 操作行为
* @return
*/
private boolean validHasPermission(JSONObject permissionList, String entityName, String action){
boolean hasPermission=false;
if(permissionList==null)
return false;
if(!permissionList.containsKey(entityName))
return false;
JSONObject entity=permissionList.getJSONObject(entityName);
if(entity.containsKey(action)){
hasPermission=true;
}
return hasPermission;
}
/** /**
* 拼接表单数据查询条件 * 校验是否有访问数据集能力
* @param formDataAbility * @param permissionList
* @param entityName * @param entityName
* @param dataSetName
* @param action * @param action
* @param srfkey
* @param permissionField
* @return * @return
*/ */
private String generatePermissionSQLForm(JSONObject formDataAbility, String entityName, String action, Object srfkey, Map<String,String> permissionField){ private boolean validHasPermission(JSONObject permissionList, String entityName, String dataSetName, String action ){
if(formDataAbility==null)
return null; boolean hasPermission=false;
if(!formDataAbility.containsKey(entityName)) if(permissionList==null)
return null; return false;
JSONObject entityObj=formDataAbility.getJSONObject(entityName);//获取实体 if(!permissionList.containsKey(entityName))
if(!entityObj.containsKey(action)) return false;
return null; JSONObject entity=permissionList.getJSONObject(entityName);
JSONArray entityOperation=entityObj.getJSONArray(action);//行为:read;insert... if(!entity.containsKey(dataSetName))
if(entityOperation.size()==0) return false;
return null; JSONObject dataSet=entity.getJSONObject(dataSetName);//获取实体数据集
String resultCond=getPermissionCond(entityOperation,permissionField); if(dataSet.containsKey(action)){
if(StringUtils.isEmpty(srfkey)) hasPermission=true;
return String.format(" (%s)",resultCond,entityName.toLowerCase()); //拼接权限条件-新建 }
else return hasPermission;
return String.format(" (%s) AND (%sid='%s')",resultCond,entityName.toLowerCase(),srfkey); //拼接权限条件-编辑
} }
/** /**
* 判断当前用户是否拥有建立表单数据权限 * 获取单条权限数据SQL
* @param formDataAbility * @param formDataAbility
* @param entityName * @param entityName
* @param targetType * @param action
* @param srfKey
* @param permissionField
* @return * @return
*/ */
private boolean isFormCreatePermission(JSONObject formDataAbility, String entityName, String targetType){ private String getPermissionSQLById(JSONObject formDataAbility, String entityName, String action, Object srfKey, Map<String,String> permissionField){
if(formDataAbility==null)
return false; JSONObject entity=formDataAbility.getJSONObject(entityName);//获取实体
if(!formDataAbility.containsKey(entityName)) JSONArray opprivList=entity.getJSONArray(action);//行为:read;insert...
return false; if(opprivList.size()==0)
JSONObject entityObj=formDataAbility.getJSONObject(entityName);//获取实体 return null;
if(!entityObj.containsKey(targetType)) String permissionSQL=getPermissionSQL(opprivList,permissionField);
return false;
return true; String keyField=permissionField.get("keyfield");
if(StringUtils.isEmpty(keyField)){
throw new RuntimeException("权限校验失败,请检查当前实体中是否已经配置主键属性!");
} }
return String.format(" (%s) AND (%s='%s')",permissionSQL,keyField,srfKey); //拼接权限条件-编辑
}
/** /**
* 表单权限检查 * 表单权限检查
...@@ -274,6 +294,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -274,6 +294,7 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* @return * @return
*/ */
private boolean testDataAccess(ServiceImpl service, QueryWrapper permissionCond){ private boolean testDataAccess(ServiceImpl service, QueryWrapper permissionCond){
boolean isPermission=false; boolean isPermission=false;
List list=service.list(permissionCond); List list=service.list(permissionCond);
if(list.size()>0) if(list.size()>0)
...@@ -283,16 +304,18 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -283,16 +304,18 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
/** /**
* 拼接权限条件(表单/表格)共用 * 获取权限SQL
* @param entityOperation * @param oppriList
* @param permissionField * @param permissionField
* @return * @return
*/ */
private String getPermissionCond(JSONArray entityOperation, Map<String,String> permissionField){ private String getPermissionSQL(JSONArray oppriList, Map<String,String> permissionField){
String nPermissionSQL = "1<>1";
String orgField=permissionField.get("orgfield"); String orgField=permissionField.get("orgfield");
String orgDeptField=permissionField.get("orgsecfield"); String orgDeptField=permissionField.get("orgsecfield");
String createManField=permissionField.get("createmanfield");
StringBuffer permissionSQL=new StringBuffer(); StringBuffer permissionSQL=new StringBuffer();
AuthenticationUser authenticationUser = AuthenticationUser.getAuthenticationUser(); AuthenticationUser authenticationUser = AuthenticationUser.getAuthenticationUser();
JSONObject userInfo = authenticationUser.getOrgInfo(); JSONObject userInfo = authenticationUser.getOrgInfo();
JSONObject orgObject = userInfo.getJSONObject("org"); JSONObject orgObject = userInfo.getJSONObject("org");
...@@ -302,61 +325,55 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -302,61 +325,55 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
JSONArray orgDeptParent = orgDeptObject.getJSONArray("porgdept"); JSONArray orgDeptParent = orgDeptObject.getJSONArray("porgdept");
JSONArray orgDeptChild = orgDeptObject.getJSONArray("sorgdept"); JSONArray orgDeptChild = orgDeptObject.getJSONArray("sorgdept");
for(int i=0;i<entityOperation.size();i++){ for(int i=0;i<oppriList.size();i++){
if(i>0 && (!StringUtils.isEmpty(permissionSQL.toString())))
permissionSQL.append("OR"); permissionSQL.append("OR");
String permissionCond=entityOperation.getString(i);//权限配置条件 String permissionCond=oppriList.getString(i);//权限配置条件
if(permissionCond.equals("CURORG")){ //本单位 if(permissionCond.equals("CURORG")){ //本单位
permissionSQL.append(String.format("(%s='%s')",orgField,AuthenticationUser.getAuthenticationUser().getOrgid())); permissionSQL.append(String.format("(%s='%s')",orgField,AuthenticationUser.getAuthenticationUser().getOrgid()));
} }
if(permissionCond.equals("SORG")){//下级单位 else if(permissionCond.equals("PORG")){//上级单位
permissionSQL.append(String.format(" %s in(%s) ", orgField, formatStringArr(orgChild)));
}
if(permissionCond.equals("PORG")){//上级单位
permissionSQL.append(String.format(" %s in(%s) ", orgField, formatStringArr(orgParent))); permissionSQL.append(String.format(" %s in(%s) ", orgField, formatStringArr(orgParent)));
} }
if(permissionCond.equals("CREATEMAN")){//建立人 else if(permissionCond.equals("SORG")){//下级单位
permissionSQL.append(String.format("(createman='%s')",AuthenticationUser.getAuthenticationUser().getUserid())); permissionSQL.append(String.format(" %s in(%s) ", orgField, formatStringArr(orgChild)));
} }
if(permissionCond.equals("CURORGDEPT")){//本部门 else if(permissionCond.equals("CREATEMAN")){//建立人
permissionSQL.append(String.format("(orgsecid='%s')",AuthenticationUser.getAuthenticationUser().getMdeptid())); permissionSQL.append(String.format("(%s='%s')",createManField,AuthenticationUser.getAuthenticationUser().getUserid()));
} }
if(permissionCond.equals("SORGDEPT")){//下级部门 else if(permissionCond.equals("CURORGDEPT")){//本部门
permissionSQL.append(String.format(" %s in (%s) ", orgDeptField, formatStringArr(orgDeptChild))); permissionSQL.append(String.format("(%s='%s')",orgDeptField,AuthenticationUser.getAuthenticationUser().getMdeptid()));
} }
if(permissionCond.equals("PORGDEPT")){//上级部门 else if(permissionCond.equals("PORGDEPT")){//上级部门
permissionSQL.append(String.format(" %s in (%s) ", orgDeptField, formatStringArr(orgDeptParent))); permissionSQL.append(String.format(" %s in (%s) ", orgDeptField, formatStringArr(orgDeptParent)));
} }
if(permissionCond.equals("ALL")){//全部数据 else if(permissionCond.equals("SORGDEPT")){//下级部门
permissionSQL.append(String.format(" %s in (%s) ", orgDeptField, formatStringArr(orgDeptChild)));
}
else if(permissionCond.equals("ALL")){//全部数据
permissionSQL.append("(1=1)"); permissionSQL.append("(1=1)");
} }
else{
permissionSQL.append(nPermissionSQL);
}
} }
if(StringUtils.isEmpty(permissionSQL.toString())) if(StringUtils.isEmpty(permissionSQL.toString()))
return ""; return "";
String resultCond=parseResult(permissionSQL, "OR");
String resultCond=permissionSQL.toString();
if(resultCond.endsWith("OR")){
resultCond=resultCond.substring(0,resultCond.lastIndexOf("OR"));
}
return resultCond; return resultCond;
} }
/** /**
* 拼接权限查询条件(表单/表格)共用 * 构造 wrapper
* @param whereCond * @param whereCond
* @param permissionField
* @return * @return
*/ */
private QueryWrapper getPermissionCond(String whereCond, Map<String,String> permissionField){ private QueryWrapper getPermissionWrapper(String whereCond){
QueryWrapper allPermissionCond=new QueryWrapper(); QueryWrapper permissionWrapper=new QueryWrapper();
if(!StringUtils.isEmpty(whereCond)){
if(StringUtils.isEmpty(whereCond)) permissionWrapper.apply(whereCond);
return allPermissionCond; }
return permissionWrapper;
allPermissionCond.apply(whereCond);
return allPermissionCond;
} }
/** /**
...@@ -365,38 +382,51 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -365,38 +382,51 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* @return * @return
*/ */
private Map<String,String> getPermissionField(EntityBase entityBase){ private Map<String,String> getPermissionField(EntityBase entityBase){
Map<String,String> permissionFiled=new HashMap<>(); Map<String,String> permissionFiled=new HashMap<>();
String orgField="orgid"; //组织权限默认值 String orgField="orgid"; //组织属性
String orgsecField="orgsecid"; //部门权限默认值 String orgDeptField="orgsecid"; //部门属性
// Map<Field, PreField> preFields= entityBase.SearchPreField(); //从缓存中获取当前类预置属性 String createManField="createman"; //创建人属性
// //寻找实体权限属性 String keyField="";//主键属性
// for (Map.Entry<Field,PreField> entry : preFields.entrySet()){
// Field prefield=entry.getKey();//获取注解字段 DEFieldCacheMap.getFieldMap(entityBase.getClass().getName());
// PreField fieldAnnotation=entry.getValue();//获取注解值 Map <Field, DEField> preFields= SearchDEField(entityBase.getClass().getName()); //从缓存中获取当前类预置属性
// PredefinedType prefieldType=fieldAnnotation.preType();
// if(prefieldType==PredefinedType.ORGID)//用户配置系统预置属性-组织机构标识 for (Map.Entry<Field,DEField> entry : preFields.entrySet()){
// orgField=prefield.getName(); Field preField=entry.getKey();//获取注解字段
// if(prefieldType==PredefinedType.ORGSECTORID)//用户配置系统预置属性-部门标识 DEField fieldAnnotation=entry.getValue();//获取注解值
// orgsecField=prefield.getName(); DEPredefinedFieldType prefieldType=fieldAnnotation.preType();
// } if(prefieldType==prefieldType.ORGID)//用户配置系统预置属性-组织机构标识
orgField=preField.getName();
if(prefieldType==prefieldType.ORGSECTORID)//用户配置系统预置属性-部门标识
orgDeptField=preField.getName();
if(fieldAnnotation.isKeyField())//用户配置系统预置属性-部门标识
keyField=preField.getName();
}
permissionFiled.put("orgfield",orgField); permissionFiled.put("orgfield",orgField);
permissionFiled.put("orgsecfield",orgsecField); permissionFiled.put("orgsecfield",orgDeptField);
permissionFiled.put("createmanfield",createManField);
permissionFiled.put("keyfield",keyField);
return permissionFiled; return permissionFiled;
} }
/** /**
* 获取bean名称 *获取含有@DEField注解的实体属性
* @param className * @param className do对象类名
* @return * @return
*/ */
private String getBeanName(String className) { private Map <Field, DEField> SearchDEField(String className){
if (Character.isLowerCase(className.charAt(0))) {
return className; List<Field> fields = DEFieldCacheMap.getFields(className);
} else { Map <Field, DEField> deFieldMap =new HashMap<>();
return (new StringBuilder()).append(Character.toLowerCase(className.charAt(0))).append(className.substring(1)).toString(); for(Field field:fields){
DEField deField=field.getAnnotation(DEField.class);
if(!ObjectUtils.isEmpty(deField)) {
deFieldMap.put(field,deField);
} }
} }
return deFieldMap;
}
/** /**
* 转换[a,b]格式字符串到 'a','b'格式 * 转换[a,b]格式字符串到 'a','b'格式
...@@ -404,8 +434,26 @@ public class AuthPermissionEvaluator implements PermissionEvaluator { ...@@ -404,8 +434,26 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
* @return * @return
*/ */
private String formatStringArr(JSONArray array) { private String formatStringArr(JSONArray array) {
String[] arr = array.toArray(new String[array.size()]); String[] arr = array.toArray(new String[array.size()]);
return "'" + String.join("','", arr) + "'"; return "'" + String.join("','", arr) + "'";
} }
/**
* 格式转换
*
* @param cond
* @param operator
* @return
*/
private String parseResult(StringBuffer cond, String operator) {
String resultCond = cond.toString();
if (resultCond.startsWith(operator))
resultCond = resultCond.replaceFirst(operator, "");
if (resultCond.endsWith(operator))
resultCond = resultCond.substring(0, resultCond.lastIndexOf(operator));
return resultCond;
}
} }
\ No newline at end of file
package cn.ibizlab.util.service;
import cn.ibizlab.util.domain.FileItem;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
public interface FileService
{
FileItem saveFile(MultipartFile multipartFile);
File getFile(String fileid);
}
\ No newline at end of file
package cn.ibizlab.util.service;
import cn.ibizlab.util.domain.FileItem;
import cn.ibizlab.util.errors.InternalServerErrorException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.UUID;
@Primary
@Slf4j
@Service
public class SimpleFileService implements FileService {
@Value("${ibiz.filePath:/app/file/}")
private String fileRoot;
@Override
public FileItem saveFile(MultipartFile multipartFile) {
FileItem item=null;
// 获取文件名
String fileName = multipartFile.getOriginalFilename();
// 获取文件后缀
String extname="."+getExtensionName(fileName);
// 用uuid作为文件名,防止生成的临时文件重复
String fileid= UUID.randomUUID().toString();
String fileFullPath = this.fileRoot+"ibztuit"+File.separator+fileid+File.separator+fileName;
File file = new File(fileFullPath);
File parent = new File(file.getParent());
if(!parent.exists())
parent.mkdirs();
try {
FileCopyUtils.copy(multipartFile.getInputStream() , Files.newOutputStream(file.toPath()));
item=new FileItem(fileid,fileName, (int)multipartFile.getSize() ,extname);
} catch (IOException e) {
throw new InternalServerErrorException("文件上传失败");
}
return item;
}
@Override
public File getFile(String fileid) {
String dirpath = this.fileRoot+"ibztuit"+File.separator+fileid;
File parent = new File(dirpath);
if (parent.exists() && parent.isDirectory() && parent.listFiles().length > 0) {
return parent.listFiles()[0];
}
throw new InternalServerErrorException("文件未找到");
}
/**
* 获取文件扩展名
* @param filename
* @return
*/
public static String getExtensionName(String filename) {
if ((filename != null) && (filename.length() > 0)) {
int dot = filename.lastIndexOf('.');
if ((dot >-1) && (dot < (filename.length() - 1))) {
return filename.substring(dot + 1);
}
}
return filename;
}
}
\ No newline at end of file
...@@ -104,7 +104,10 @@ public class SimpleUserService implements AuthenticationUserService{ ...@@ -104,7 +104,10 @@ public class SimpleUserService implements AuthenticationUserService{
JSONObject orgInfo=ouFeignClient.getOrgInfo(user.getLoginname()); JSONObject orgInfo=ouFeignClient.getOrgInfo(user.getLoginname());
if(orgInfo==null) if(orgInfo==null)
throw new RuntimeException("获取用户信息失败,请检查用户中心[IBZOU]中是否存在当前用户!"); throw new RuntimeException("获取用户信息失败,请检查用户中心[IBZOU]中是否存在当前用户!");
JSONObject curUser=orgInfo.getJSONObject("curuser");
user.setOrgInfo(orgInfo); user.setOrgInfo(orgInfo);
user.setMdeptid(curUser.getString("orgdept"));
user.setOrgid(curUser.getString("org"));
} }
} }
......
...@@ -60,3 +60,7 @@ logging: ...@@ -60,3 +60,7 @@ logging:
ribbon: ribbon:
ReadTimeout: 60000 ReadTimeout: 60000
ConnectTimeout: 60000 ConnectTimeout: 60000
#系统是否开启权限验证
ibiz:
enablePermissionValid: false
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册