dynamic Groups and Roles

This commit is contained in:
MaxKey 2022-04-27 15:23:36 +08:00
parent 6523b2b12e
commit b1b021e63f
13 changed files with 68 additions and 123 deletions

View File

@ -48,6 +48,7 @@ public class GroupMember extends UserInfo implements Serializable{
@Column @Column
private String groupId; private String groupId;
private String groupName; private String groupName;
private String dynamic;
@Column @Column
private String memberId; private String memberId;
private String memberName; private String memberName;
@ -163,11 +164,17 @@ public class GroupMember extends UserInfo implements Serializable{
return memberName; return memberName;
} }
public void setMemberName(String memberName) { public void setMemberName(String memberName) {
this.memberName = memberName; this.memberName = memberName;
} }
public String getDynamic() {
return dynamic;
}
public void setDynamic(String dynamic) {
this.dynamic = dynamic;
}
public String getInstId() { public String getInstId() {
return instId; return instId;

View File

@ -42,6 +42,7 @@ public class RoleMember extends UserInfo implements Serializable {
@Column @Column
private String roleId; private String roleId;
private String roleName; private String roleName;
private String dynamic;
@Column @Column
private String memberId; private String memberId;
private String memberName; private String memberName;
@ -80,6 +81,14 @@ public class RoleMember extends UserInfo implements Serializable {
this.roleName = roleName; this.roleName = roleName;
} }
public String getDynamic() {
return dynamic;
}
public void setDynamic(String dynamic) {
this.dynamic = dynamic;
}
public String getMemberId() { public String getMemberId() {
return memberId; return memberId;
} }

View File

@ -34,7 +34,6 @@ import org.maxkey.entity.UserInfo;
public interface GroupMemberMapper extends IJpaBaseMapper<GroupMember> { public interface GroupMemberMapper extends IJpaBaseMapper<GroupMember> {
public List<GroupMember> allMemberInGroup(GroupMember entity);
public List<GroupMember> memberInGroup(GroupMember entity); public List<GroupMember> memberInGroup(GroupMember entity);
public List<GroupMember> memberNotInGroup(GroupMember entity); public List<GroupMember> memberNotInGroup(GroupMember entity);
public List<GroupMember> groupMemberInGroup(GroupMember entity); public List<GroupMember> groupMemberInGroup(GroupMember entity);

View File

@ -33,7 +33,6 @@ import org.maxkey.entity.Roles;
public interface RoleMemberMapper extends IJpaBaseMapper<RoleMember> { public interface RoleMemberMapper extends IJpaBaseMapper<RoleMember> {
public List<RoleMember> allMemberInRole(RoleMember entity);
public List<RoleMember> memberInRole(RoleMember entity); public List<RoleMember> memberInRole(RoleMember entity);
public List<RoleMember> memberNotInRole(RoleMember entity); public List<RoleMember> memberNotInRole(RoleMember entity);
public List<RoleMember> roleMemberInRole(RoleMember entity); public List<RoleMember> roleMemberInRole(RoleMember entity);

View File

@ -11,51 +11,12 @@
</if> </if>
</sql> </sql>
<!-- GROUP_MEMBER User Member-->
<select id="allMemberInGroup" parameterType="GroupMember" resultType="GroupMember">
select distinct
u.id,
u.username,
u.usertype,
u.windowsaccount,
u.displayname ,
u.nickname ,
u.namezhspell,
u.namezhshortspell,
u.givenname ,
u.middlename ,
u.familyname ,
u.gender,
u.authntype,
u.mobile,
u.email,
u.workemail,
u.workphonenumber,
u.employeenumber,
u.division,
u.costcenter,
u.organization,
u.departmentid,
u.department,
u.jobtitle,
u.joblevel,
u.createddate,
u.status
from
mxk_userinfo u
where instid = #{instId}
</select>
<select id="memberInGroup" parameterType="GroupMember" resultType="GroupMember"> <select id="memberInGroup" parameterType="GroupMember" resultType="GroupMember">
select distinct select distinct
gm.id, gm.id as id,
g.id as groupid,
g.name as groupname,
g.dynamic dynamic,
u.username, u.username,
u.usertype, u.usertype,
u.windowsaccount, u.windowsaccount,
@ -210,7 +171,7 @@
instid instid
) )
select select
concat('${id}',u.id) id, concat('${id}_',u.id) id,
'${id}' groupid, '${id}' groupid,
u.id memberid, u.id memberid,
'USER-DYNAMIC' type, 'USER-DYNAMIC' type,
@ -250,6 +211,8 @@
<select id="queryMemberByGroupId" parameterType="string" resultType="UserInfo"> <select id="queryMemberByGroupId" parameterType="string" resultType="UserInfo">
select distinct select distinct
g.groupId,
g.groupName,
u.id, u.id,
u.username, u.username,
u.usertype, u.usertype,
@ -296,7 +259,7 @@
<delete id="deleteByGroupId" parameterType="string" > <delete id="deleteByGroupId" parameterType="string" >
delete from mxk_group_member gm delete from mxk_group_member gm
where gm.groupid=#{value} where gm.groupid = #{value} and groupId != 'ROLE_ALL_USER'
</delete> </delete>
</mapper> </mapper>

View File

@ -11,51 +11,12 @@
</if> </if>
</sql> </sql>
<!-- ROLE_MEMBER User Member-->
<select id="allMemberInRole" parameterType="RoleMember" resultType="RoleMember">
select distinct
u.id,
u.username,
u.usertype,
u.windowsaccount,
u.displayname ,
u.nickname ,
u.namezhspell,
u.namezhshortspell,
u.givenname ,
u.middlename ,
u.familyname ,
u.gender,
u.authntype,
u.mobile,
u.email,
u.workemail,
u.workphonenumber,
u.employeenumber,
u.division,
u.costcenter,
u.organization,
u.departmentid,
u.department,
u.jobtitle,
u.joblevel,
u.createddate,
u.status
from
mxk_userinfo u
where instid = #{instId}
</select>
<select id="memberInRole" parameterType="RoleMember" resultType="RoleMember"> <select id="memberInRole" parameterType="RoleMember" resultType="RoleMember">
select distinct select distinct
rm.id, r.id as roleid,
r.name as rolename,
r.dynamic dynamic,
rm.id as id,
u.username, u.username,
u.usertype, u.usertype,
u.windowsaccount, u.windowsaccount,
@ -211,7 +172,7 @@
type type
) )
select select
concat('${id}',u.id) id, concat('${id}_',u.id) id,
'${id}' ROLEID, '${id}' ROLEID,
u.id memberid, u.id memberid,
'USER-DYNAMIC' type 'USER-DYNAMIC' type

View File

@ -76,6 +76,7 @@
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th>
@ -94,6 +95,7 @@
[nzDisabled]="data.disabled" [nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td> ></td>
<td nzAlign="center"> {{ data.groupName }}</td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="center"> {{ data.username }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="center"> {{ data.displayName }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="center"> {{ data.employeeNumber }}</td>
@ -102,9 +104,15 @@
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="left" nzBreakWord="false"
><div nz-col> ><div nz-col>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button
'mxk.text.delete' | i18n *ngIf="data.dynamic == '0'"
}}</button></div nz-button
type="button"
(click)="onDelete($event, data.id)"
[nzType]="'primary'"
nzDanger
>{{ 'mxk.text.delete' | i18n }}</button
></div
></td ></td
> >
</tr> </tr>

View File

@ -27,7 +27,7 @@
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="resumeTime">{{ 'mxk.groups.resumeTime' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="resumeTime">{{ 'mxk.groups.resumeTime' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid port!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid port!">
<nz-time-picker <nz-time-picker
@ -39,7 +39,7 @@
></nz-time-picker> ></nz-time-picker>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="suspendTime">{{ 'mxk.groups.suspendTime' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="suspendTime">{{ 'mxk.groups.suspendTime' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid suspendTime!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid suspendTime!">
<nz-time-picker <nz-time-picker
@ -51,13 +51,13 @@
></nz-time-picker> ></nz-time-picker>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="orgIdsList">{{ 'mxk.groups.orgIdsList' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="orgIdsList">{{ 'mxk.groups.orgIdsList' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!">
<input [(ngModel)]="form.model.orgIdsList" [ngModelOptions]="{ standalone: true }" nz-input name="orgIdsList" id="orgIdsList" /> <input [(ngModel)]="form.model.orgIdsList" [ngModelOptions]="{ standalone: true }" nz-input name="orgIdsList" id="orgIdsList" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="filters">{{ 'mxk.groups.filters' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="filters">{{ 'mxk.groups.filters' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!">
<textarea <textarea

View File

@ -76,6 +76,7 @@
<thead> <thead>
<tr> <tr>
<th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th> <th [nzChecked]="query.checked" [nzIndeterminate]="query.indeterminate" (nzCheckedChange)="onTableAllChecked($event)"></th>
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.username' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.displayName' | i18n }}</th>
<th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th> <th nzAlign="center">{{ 'mxk.users.employeeNumber' | i18n }}</th>
@ -94,6 +95,7 @@
[nzDisabled]="data.disabled" [nzDisabled]="data.disabled"
(nzCheckedChange)="onTableItemChecked(data.id, $event)" (nzCheckedChange)="onTableItemChecked(data.id, $event)"
></td> ></td>
<td nzAlign="center"> {{ data.roleName }}</td>
<td nzAlign="center"> {{ data.username }}</td> <td nzAlign="center"> {{ data.username }}</td>
<td nzAlign="center"> {{ data.displayName }}</td> <td nzAlign="center"> {{ data.displayName }}</td>
<td nzAlign="center"> {{ data.employeeNumber }}</td> <td nzAlign="center"> {{ data.employeeNumber }}</td>
@ -102,9 +104,15 @@
<td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td> <td nzAlign="center"> {{ data.gender == 1 ? ('mxk.users.gender.female' | i18n) : ('mxk.users.gender.male' | i18n) }}</td>
<td nzAlign="left" nzBreakWord="false" <td nzAlign="left" nzBreakWord="false"
><div nz-col> ><div nz-col>
<button nz-button type="button" (click)="onDelete($event, data.id)" [nzType]="'primary'" nzDanger>{{ <button
'mxk.text.delete' | i18n *ngIf="data.dynamic == '0'"
}}</button></div nz-button
type="button"
(click)="onDelete($event, data.id)"
[nzType]="'primary'"
nzDanger
>{{ 'mxk.text.delete' | i18n }}</button
></div
></td ></td
> >
</tr> </tr>

View File

@ -27,7 +27,7 @@
<ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template> <ng-template #unCheckedTemplate><i nz-icon nzType="close"></i></ng-template>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="resumeTime">{{ 'mxk.roles.resumeTime' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="resumeTime">{{ 'mxk.roles.resumeTime' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid port!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid port!">
<nz-time-picker <nz-time-picker
@ -39,7 +39,7 @@
></nz-time-picker> ></nz-time-picker>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="suspendTime">{{ 'mxk.roles.suspendTime' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="suspendTime">{{ 'mxk.roles.suspendTime' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid suspendTime!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid suspendTime!">
<nz-time-picker <nz-time-picker
@ -51,13 +51,13 @@
></nz-time-picker> ></nz-time-picker>
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="orgIdsList">{{ 'mxk.roles.orgIdsList' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="orgIdsList">{{ 'mxk.roles.orgIdsList' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!">
<input [(ngModel)]="form.model.orgIdsList" [ngModelOptions]="{ standalone: true }" nz-input name="orgIdsList" id="orgIdsList" /> <input [(ngModel)]="form.model.orgIdsList" [ngModelOptions]="{ standalone: true }" nz-input name="orgIdsList" id="orgIdsList" />
</nz-form-control> </nz-form-control>
</nz-form-item> </nz-form-item>
<nz-form-item> <nz-form-item *ngIf="form.model.switch_dynamic">
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="filters">{{ 'mxk.roles.filters' | i18n }}</nz-form-label> <nz-form-label [nzSm]="6" [nzXs]="24" nzFor="filters">{{ 'mxk.roles.filters' | i18n }}</nz-form-label>
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!"> <nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!">
<textarea <textarea

View File

@ -68,13 +68,9 @@ public class GroupMemberController {
public ResponseEntity<?> memberInGroup(@ModelAttribute GroupMember groupMember,@CurrentUser UserInfo currentUser) { public ResponseEntity<?> memberInGroup(@ModelAttribute GroupMember groupMember,@CurrentUser UserInfo currentUser) {
_logger.debug("groupMember : "+groupMember); _logger.debug("groupMember : "+groupMember);
groupMember.setInstId(currentUser.getInstId()); groupMember.setInstId(currentUser.getInstId());
if(groupMember.getGroupId()==null||groupMember.getGroupId().equals("")||groupMember.getGroupId().equals("ROLE_ALL_USER")){
return new Message<JpaPageResults<GroupMember>>(
groupMemberService.queryPageResults("allMemberInGroup",groupMember)).buildResponse();
}else{
return new Message<JpaPageResults<GroupMember>>( return new Message<JpaPageResults<GroupMember>>(
groupMemberService.queryPageResults("memberInGroup",groupMember)).buildResponse(); groupMemberService.queryPageResults("memberInGroup",groupMember)).buildResponse();
}
} }

View File

@ -105,7 +105,7 @@ public class GroupsController {
@RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE}) @RequestMapping(value={"/delete"}, produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<?> delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) { public ResponseEntity<?> delete(@RequestParam("ids") String ids,@CurrentUser UserInfo currentUser) {
_logger.debug("-delete ids : {}" , ids); _logger.debug("-delete ids : {}" , ids);
ids = ids.replaceAll("ROLE_ALL_USER", "-1").replaceAll("ROLE_ADMINISTRATORS", "-1");
if (groupsService.deleteBatch(ids)) { if (groupsService.deleteBatch(ids)) {
return new Message<Groups>(Message.SUCCESS).buildResponse(); return new Message<Groups>(Message.SUCCESS).buildResponse();
} else { } else {

View File

@ -67,14 +67,9 @@ public class RoleMemberController {
public ResponseEntity<?> memberInRole(@ModelAttribute RoleMember roleMember,@CurrentUser UserInfo currentUser) { public ResponseEntity<?> memberInRole(@ModelAttribute RoleMember roleMember,@CurrentUser UserInfo currentUser) {
_logger.debug("roleMember : "+roleMember); _logger.debug("roleMember : "+roleMember);
roleMember.setInstId(currentUser.getInstId()); roleMember.setInstId(currentUser.getInstId());
if(roleMember.getRoleId()==null||roleMember.getRoleId().equals("")||roleMember.getRoleId().equals("ALL_USER_ROLE")){
return new Message<JpaPageResults<RoleMember>>(
roleMemberService.queryPageResults("allMemberInRole",roleMember)).buildResponse();
}else{
return new Message<JpaPageResults<RoleMember>>( return new Message<JpaPageResults<RoleMember>>(
roleMemberService.queryPageResults("memberInRole",roleMember)).buildResponse(); roleMemberService.queryPageResults("memberInRole",roleMember)).buildResponse();
} }
}
@RequestMapping(value = { "/memberNotInRole" }) @RequestMapping(value = { "/memberNotInRole" })
@ResponseBody @ResponseBody