修复动态用户组出现bug #I85U4I
This commit is contained in:
@@ -47,7 +47,7 @@ public class GroupsService extends JpaService<Groups> implements Serializable {
|
||||
final static Logger _logger = LoggerFactory.getLogger(GroupsService.class);
|
||||
@JsonIgnore
|
||||
@Autowired
|
||||
GroupMemberService service;
|
||||
GroupMemberService groupMemberService;
|
||||
|
||||
@Autowired
|
||||
InstitutionsService institutionsService;
|
||||
@@ -71,7 +71,7 @@ public class GroupsService extends JpaService<Groups> implements Serializable {
|
||||
|
||||
public boolean deleteById(String groupId) {
|
||||
this.remove(groupId);
|
||||
service.deleteByGroupId(groupId);
|
||||
groupMemberService.deleteByGroupId(groupId);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -131,14 +131,14 @@ public class GroupsService extends JpaService<Groups> implements Serializable {
|
||||
|
||||
if(isDynamicTimeSupport) {
|
||||
if(isBetweenEffectiveTime) {
|
||||
service.deleteDynamicMember(dynamicGroup);
|
||||
service.addDynamicMember(dynamicGroup);
|
||||
groupMemberService.deleteDynamicMember(dynamicGroup);
|
||||
groupMemberService.addDynamicMember(dynamicGroup);
|
||||
}else {
|
||||
service.deleteDynamicMember(dynamicGroup);
|
||||
groupMemberService.deleteDynamicMember(dynamicGroup);
|
||||
}
|
||||
}else{
|
||||
service.deleteDynamicMember(dynamicGroup);
|
||||
service.addDynamicMember(dynamicGroup);
|
||||
groupMemberService.deleteDynamicMember(dynamicGroup);
|
||||
groupMemberService.addDynamicMember(dynamicGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
</if>
|
||||
</select>
|
||||
|
||||
<update id="addDynamicGroupMember" parameterType="Groups" >
|
||||
<update id="addDynamicMember" parameterType="Groups" >
|
||||
insert into mxk_group_member(
|
||||
id,
|
||||
groupid,
|
||||
@@ -213,7 +213,7 @@
|
||||
</if>
|
||||
</update>
|
||||
|
||||
<delete id="deleteDynamicGroupMember" parameterType="Groups" >
|
||||
<delete id="deleteDynamicMember" parameterType="Groups" >
|
||||
delete from mxk_group_member gm
|
||||
where type = 'user-dynamic'
|
||||
and gm.groupid=#{id}
|
||||
|
||||
@@ -19,8 +19,8 @@ import format from 'date-fns/format';
|
||||
import { BaseEntity } from './BaseEntity';
|
||||
|
||||
export class Groups extends BaseEntity {
|
||||
roleCode!: String;
|
||||
roleName!: String;
|
||||
groupCode!: String;
|
||||
groupName!: String;
|
||||
category!: String;
|
||||
filters!: String;
|
||||
orgIdsList!: String;
|
||||
|
||||
@@ -8,28 +8,28 @@
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item>
|
||||
<nz-form-label [nzMd]="6" nzRequired nzFor="roleCode">{{ 'mxk.text.id' | i18n }}</nz-form-label>
|
||||
<nz-form-label [nzMd]="6" nzRequired nzFor="groupCode">{{ 'mxk.text.id' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!">
|
||||
<input [(ngModel)]="form.model.roleCode" [ngModelOptions]="{ standalone: true }" nz-input name="roleCode" />
|
||||
<input [(ngModel)]="form.model.groupCode" [ngModelOptions]="{ standalone: true }" nz-input name="groupCode" />
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item>
|
||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="roleName">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
|
||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="groupName">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid minLength!">
|
||||
<input [(ngModel)]="form.model.roleName" [ngModelOptions]="{ standalone: true }" nz-input name="roleName" id="roleName" />
|
||||
<input [(ngModel)]="form.model.groupName" [ngModelOptions]="{ standalone: true }" nz-input name="groupName" />
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item>
|
||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="dynamic">{{ 'mxk.roles.category' | i18n }}</nz-form-label>
|
||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="dynamic">{{ 'mxk.groups.category' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSm]="14" [nzXs]="24" nzErrorTip="The input is not valid status!">
|
||||
<nz-radio-group [(ngModel)]="form.model.category" [ngModelOptions]="{ standalone: true }" nzButtonStyle="solid">
|
||||
<label nz-radio-button nzValue="static">{{ 'mxk.roles.category.static' | i18n }}</label>
|
||||
<label nz-radio-button nzValue="dynamic">{{ 'mxk.roles.category.dynamic' | i18n }}</label>
|
||||
<label nz-radio-button nzValue="static">{{ 'mxk.groups.category.static' | i18n }}</label>
|
||||
<label nz-radio-button nzValue="dynamic">{{ 'mxk.groups.category.dynamic' | i18n }}</label>
|
||||
</nz-radio-group>
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item *ngIf="form.model.category == '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.groups.resumeTime' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid port!">
|
||||
<nz-time-picker
|
||||
[(ngModel)]="form.model.picker_resumeTime"
|
||||
@@ -41,7 +41,7 @@
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item *ngIf="form.model.category == '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.groups.suspendTime' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid suspendTime!">
|
||||
<nz-time-picker
|
||||
[(ngModel)]="form.model.picker_suspendTime"
|
||||
@@ -53,7 +53,7 @@
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item *ngIf="form.model.category == '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.groups.orgIdsList' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid upperCase!">
|
||||
<input
|
||||
type="hidden"
|
||||
@@ -77,7 +77,7 @@
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
<nz-form-item *ngIf="form.model.category == '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.groups.filters' | i18n }}</nz-form-label>
|
||||
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid filters!">
|
||||
<textarea
|
||||
rows="4"
|
||||
|
||||
@@ -5,21 +5,26 @@
|
||||
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
|
||||
<div nz-col nzMd="16" nzSm="24">
|
||||
<nz-form-item>
|
||||
<nz-form-label nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
|
||||
<nz-form-label nzFor="name">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
|
||||
<nz-form-control>
|
||||
<input nz-input [(ngModel)]="query.params.groupName" [ngModelOptions]="{ standalone: true }"
|
||||
name="groupName" placeholder="" id="groupName" />
|
||||
<input
|
||||
nz-input
|
||||
[(ngModel)]="query.params.groupName"
|
||||
[ngModelOptions]="{ standalone: true }"
|
||||
name="groupName"
|
||||
placeholder=""
|
||||
id="groupName"
|
||||
/>
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
</div>
|
||||
|
||||
<div nz-col [nzSpan]="query.expandForm ? 24 : 8" [class.text-right]="query.expandForm">
|
||||
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' |
|
||||
i18n }}</button>
|
||||
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' |
|
||||
i18n }}</button>
|
||||
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button>
|
||||
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button>
|
||||
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
|
||||
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
|
||||
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -29,34 +34,48 @@
|
||||
<button nz-button type="button" [nzType]="'primary'" (click)="onAdd($event)">{{ 'mxk.text.add' | i18n }}</button>
|
||||
<button nz-button type="button" (click)="onBatchDelete($event)" [nzType]="'primary'" nzDanger class="mx-sm">{{
|
||||
'mxk.text.delete' | i18n
|
||||
}}</button>
|
||||
}}</button>
|
||||
</div>
|
||||
<nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
|
||||
[nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
|
||||
[nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
|
||||
(nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
|
||||
<nz-table
|
||||
#dynamicTable
|
||||
nzTableLayout="auto"
|
||||
nzSize="small"
|
||||
nzBordered
|
||||
nzShowSizeChanger
|
||||
[nzData]="query.results.rows"
|
||||
[nzFrontPagination]="false"
|
||||
[nzTotal]="query.results.records"
|
||||
[nzPageSizeOptions]="query.params.pageSizeOptions"
|
||||
[nzPageSize]="query.params.pageSize"
|
||||
[nzPageIndex]="query.params.pageNumber"
|
||||
[nzLoading]="this.query.tableLoading"
|
||||
(nzQueryParams)="onQueryParamsChange($event)"
|
||||
nzWidth="100%"
|
||||
>
|
||||
<thead>
|
||||
<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" style="display: none">Id</th>
|
||||
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.roles.category' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.groups.category' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.text.description' | i18n }}</th>
|
||||
<th nzAlign="center" class="table_cell_action_2">{{ 'mxk.text.action' | i18n }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr *ngFor="let data of query.results.rows">
|
||||
<td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
|
||||
(nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
|
||||
<td
|
||||
[nzChecked]="query.tableCheckedId.has(data.id)"
|
||||
[nzDisabled]="data.disabled"
|
||||
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
|
||||
></td>
|
||||
<td nzAlign="left" style="display: none">
|
||||
<span>{{ data.id }}</span>
|
||||
</td>
|
||||
<td nzAlign="left" nzBreakWord="false">{{ data.groupName }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'dynamic'"> {{ 'mxk.roles.category.dynamic' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'static'"> {{ 'mxk.roles.category.static' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'app'"> {{ 'mxk.roles.category.app' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'dynamic'"> {{ 'mxk.groups.category.dynamic' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'static'"> {{ 'mxk.groups.category.static' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'app'"> {{ 'mxk.groups.category.app' | i18n }}</td>
|
||||
<td nzAlign="left">{{ data.description }}</td>
|
||||
<td nzAlign="center" nzBreakWord="false">
|
||||
<div nz-col>
|
||||
@@ -68,13 +87,15 @@
|
||||
|
||||
<nz-dropdown-menu #menuMoreAction="nzDropdownMenu">
|
||||
<ul nz-menu>
|
||||
<li nz-menu-item (click)="onMembers($event, data.id, data.groupName)">{{ 'mxk.roles.member' | i18n }}
|
||||
</li>
|
||||
<li nz-menu-item (click)="onPermissions($event, data.id, data.groupName)">{{ 'mxk.roles.permissions' |
|
||||
i18n }}</li>
|
||||
<li nz-menu-item
|
||||
<li nz-menu-item (click)="onMembers($event, data.id, data.groupName)">{{ 'mxk.groups.member' | i18n }} </li>
|
||||
<li nz-menu-item (click)="onPermissions($event, data.id, data.groupName)">{{ 'mxk.groups.permissions' | i18n }}</li>
|
||||
<li
|
||||
nz-menu-item
|
||||
*ngIf="data.roleCode != 'ROLE_ADMINISTRATORS' && data.roleCode != 'ROLE_ALL_USER' && data.roleCode != 'ROLE_MANAGERS'"
|
||||
(click)="onDelete($event, data.id)" nzDanger>{{ 'mxk.text.delete' | i18n }}</li>
|
||||
(click)="onDelete($event, data.id)"
|
||||
nzDanger
|
||||
>{{ 'mxk.text.delete' | i18n }}</li
|
||||
>
|
||||
</ul>
|
||||
</nz-dropdown-menu>
|
||||
</div>
|
||||
@@ -82,4 +103,4 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</nz-table>
|
||||
</nz-card>
|
||||
</nz-card>
|
||||
|
||||
@@ -4,52 +4,72 @@
|
||||
<div nz-row [nzGutter]="{ xs: 8, sm: 8, md: 8, lg: 24, xl: 48, xxl: 48 }">
|
||||
<div nz-col nzMd="14" nzSm="24">
|
||||
<nz-form-item>
|
||||
<nz-form-label nzFor="groupName">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
|
||||
<nz-form-label nzFor="groupName">{{ 'mxk.groups.name' | i18n }}</nz-form-label>
|
||||
<nz-form-control>
|
||||
<input nz-input [(ngModel)]="query.params.groupName" [ngModelOptions]="{ standalone: true }" name="groupName"
|
||||
placeholder="" id="groupName" />
|
||||
<input
|
||||
nz-input
|
||||
[(ngModel)]="query.params.groupName"
|
||||
[ngModelOptions]="{ standalone: true }"
|
||||
name="groupName"
|
||||
placeholder=""
|
||||
id="groupName"
|
||||
/>
|
||||
</nz-form-control>
|
||||
</nz-form-item>
|
||||
</div>
|
||||
|
||||
<div nz-col [nzSpan]="query.expandForm ? 24 : 10" [class.text-right]="query.expandForm">
|
||||
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n
|
||||
}}</button>
|
||||
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n
|
||||
}}</button>
|
||||
<button nz-button type="submit" [nzType]="'primary'" [nzLoading]="query.submitLoading">{{ 'mxk.text.query' | i18n }}</button>
|
||||
<button nz-button type="reset" (click)="onReset()" class="mx-sm" style="display: none">{{ 'mxk.text.reset' | i18n }}</button>
|
||||
<button nz-button (click)="query.expandForm = !query.expandForm" class="mx-sm" style="display: none">
|
||||
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button>
|
||||
{{ query.expandForm ? ('mxk.text.collapse' | i18n) : ('mxk.text.expand' | i18n) }}</button
|
||||
>
|
||||
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.confirm' | i18n }}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<nz-table #dynamicTable nzTableLayout="auto" nzSize="small" nzBordered nzShowSizeChanger [nzData]="query.results.rows"
|
||||
[nzFrontPagination]="false" [nzTotal]="query.results.records" [nzPageSizeOptions]="query.params.pageSizeOptions"
|
||||
[nzPageSize]="query.params.pageSize" [nzPageIndex]="query.params.pageNumber" [nzLoading]="this.query.tableLoading"
|
||||
(nzQueryParams)="onQueryParamsChange($event)" nzWidth="100%">
|
||||
<nz-table
|
||||
#dynamicTable
|
||||
nzTableLayout="auto"
|
||||
nzSize="small"
|
||||
nzBordered
|
||||
nzShowSizeChanger
|
||||
[nzData]="query.results.rows"
|
||||
[nzFrontPagination]="false"
|
||||
[nzTotal]="query.results.records"
|
||||
[nzPageSizeOptions]="query.params.pageSizeOptions"
|
||||
[nzPageSize]="query.params.pageSize"
|
||||
[nzPageIndex]="query.params.pageNumber"
|
||||
[nzLoading]="this.query.tableLoading"
|
||||
(nzQueryParams)="onQueryParamsChange($event)"
|
||||
nzWidth="100%"
|
||||
>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th nzAlign="center" style="display: none">Id</th>
|
||||
<th nzAlign="center">{{ 'mxk.roles.name' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.roles.category' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.groups.name' | i18n }}</th>
|
||||
<th nzAlign="center">{{ 'mxk.groups.category' | i18n }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr *ngFor="let data of query.results.rows">
|
||||
<td [nzChecked]="query.tableCheckedId.has(data.id)" [nzDisabled]="data.disabled"
|
||||
(nzCheckedChange)="onTableItemChecked(data.id, $event)"></td>
|
||||
<td
|
||||
[nzChecked]="query.tableCheckedId.has(data.id)"
|
||||
[nzDisabled]="data.disabled"
|
||||
(nzCheckedChange)="onTableItemChecked(data.id, $event)"
|
||||
></td>
|
||||
<td nzAlign="left" style="display: none">
|
||||
<span>{{ data.id }}</span>
|
||||
</td>
|
||||
<td nzAlign="left"> {{ data.groupName }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'dynamic'"> {{ 'mxk.roles.category.dynamic' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'static'"> {{ 'mxk.roles.category.static' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'dynamic'"> {{ 'mxk.groups.category.dynamic' | i18n }}</td>
|
||||
<td nzAlign="center" *ngIf="data.category == 'static'"> {{ 'mxk.groups.category.static' | i18n }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</nz-table>
|
||||
<div *nzModalFooter style="display: none">
|
||||
<button nz-button nzType="default" (click)="onClose($event)">{{ 'mxk.text.close' | i18n }}</button>
|
||||
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.submit' | i18n }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user