组和角色优化,增加角色动态任务,删除resumeTime和suspendTime
This commit is contained in:
@@ -65,10 +65,6 @@ public class Groups extends JpaEntity implements Serializable {
|
|||||||
|
|
||||||
@Column
|
@Column
|
||||||
String orgIdsList;
|
String orgIdsList;
|
||||||
@Column
|
|
||||||
String resumeTime;
|
|
||||||
@Column
|
|
||||||
String suspendTime;
|
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
int isdefault;
|
int isdefault;
|
||||||
@@ -228,22 +224,6 @@ public class Groups extends JpaEntity implements Serializable {
|
|||||||
this.orgIdsList = orgIdsList;
|
this.orgIdsList = orgIdsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getResumeTime() {
|
|
||||||
return resumeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResumeTime(String resumeTime) {
|
|
||||||
this.resumeTime = resumeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSuspendTime() {
|
|
||||||
return suspendTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSuspendTime(String suspendTime) {
|
|
||||||
this.suspendTime = suspendTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getInstId() {
|
public String getInstId() {
|
||||||
return instId;
|
return instId;
|
||||||
}
|
}
|
||||||
@@ -275,10 +255,6 @@ public class Groups extends JpaEntity implements Serializable {
|
|||||||
builder.append(filters);
|
builder.append(filters);
|
||||||
builder.append(", orgIdsList=");
|
builder.append(", orgIdsList=");
|
||||||
builder.append(orgIdsList);
|
builder.append(orgIdsList);
|
||||||
builder.append(", resumeTime=");
|
|
||||||
builder.append(resumeTime);
|
|
||||||
builder.append(", suspendTime=");
|
|
||||||
builder.append(suspendTime);
|
|
||||||
builder.append(", isdefault=");
|
builder.append(", isdefault=");
|
||||||
builder.append(isdefault);
|
builder.append(isdefault);
|
||||||
builder.append(", description=");
|
builder.append(", description=");
|
||||||
|
|||||||
@@ -64,10 +64,6 @@ public class Roles extends JpaEntity implements Serializable {
|
|||||||
|
|
||||||
@Column
|
@Column
|
||||||
String orgIdsList;
|
String orgIdsList;
|
||||||
@Column
|
|
||||||
String resumeTime;
|
|
||||||
@Column
|
|
||||||
String suspendTime;
|
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
int isdefault;
|
int isdefault;
|
||||||
@@ -230,22 +226,6 @@ public class Roles extends JpaEntity implements Serializable {
|
|||||||
this.orgIdsList = orgIdsList;
|
this.orgIdsList = orgIdsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getResumeTime() {
|
|
||||||
return resumeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setResumeTime(String resumeTime) {
|
|
||||||
this.resumeTime = resumeTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSuspendTime() {
|
|
||||||
return suspendTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSuspendTime(String suspendTime) {
|
|
||||||
this.suspendTime = suspendTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAppId() {
|
public String getAppId() {
|
||||||
return appId;
|
return appId;
|
||||||
}
|
}
|
||||||
@@ -285,10 +265,6 @@ public class Roles extends JpaEntity implements Serializable {
|
|||||||
builder.append(filters);
|
builder.append(filters);
|
||||||
builder.append(", orgIdsList=");
|
builder.append(", orgIdsList=");
|
||||||
builder.append(orgIdsList);
|
builder.append(orgIdsList);
|
||||||
builder.append(", resumeTime=");
|
|
||||||
builder.append(resumeTime);
|
|
||||||
builder.append(", suspendTime=");
|
|
||||||
builder.append(suspendTime);
|
|
||||||
builder.append(", isdefault=");
|
builder.append(", isdefault=");
|
||||||
builder.append(isdefault);
|
builder.append(isdefault);
|
||||||
builder.append(", description=");
|
builder.append(", description=");
|
||||||
|
|||||||
+7
-40
@@ -18,8 +18,6 @@
|
|||||||
package org.dromara.maxkey.persistence.service;
|
package org.dromara.maxkey.persistence.service;
|
||||||
|
|
||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -35,13 +33,10 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public class GroupsService extends JpaService<Groups>{
|
public class GroupsService extends JpaService<Groups>{
|
||||||
|
|
||||||
static final Logger _logger = LoggerFactory.getLogger(GroupsService.class);
|
static final Logger _logger = LoggerFactory.getLogger(GroupsService.class);
|
||||||
@JsonIgnore
|
|
||||||
@Autowired
|
@Autowired
|
||||||
GroupMemberService groupMemberService;
|
GroupMemberService groupMemberService;
|
||||||
|
|
||||||
@@ -77,26 +72,6 @@ public class GroupsService extends JpaService<Groups>{
|
|||||||
|
|
||||||
public void refreshDynamicGroups(Groups dynamicGroup){
|
public void refreshDynamicGroups(Groups dynamicGroup){
|
||||||
if(dynamicGroup.getCategory().equals(Roles.Category.DYNAMIC)) {
|
if(dynamicGroup.getCategory().equals(Roles.Category.DYNAMIC)) {
|
||||||
boolean isDynamicTimeSupport = false;
|
|
||||||
boolean isBetweenEffectiveTime = false;
|
|
||||||
if(StringUtils.isNotBlank(dynamicGroup.getResumeTime())
|
|
||||||
&&StringUtils.isNotBlank(dynamicGroup.getSuspendTime())
|
|
||||||
&&!dynamicGroup.getSuspendTime().equals("00:00")) {
|
|
||||||
LocalTime currentTime = LocalDateTime.now().toLocalTime();
|
|
||||||
LocalTime resumeTime = LocalTime.parse(dynamicGroup.getResumeTime());
|
|
||||||
LocalTime suspendTime = LocalTime.parse(dynamicGroup.getSuspendTime());
|
|
||||||
|
|
||||||
_logger.info("currentTime: {} , resumeTime : {} , suspendTime: {}"
|
|
||||||
, currentTime
|
|
||||||
, resumeTime
|
|
||||||
, suspendTime);
|
|
||||||
isDynamicTimeSupport = true;
|
|
||||||
|
|
||||||
if(resumeTime.isBefore(currentTime) && currentTime.isBefore(suspendTime)) {
|
|
||||||
isBetweenEffectiveTime = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(StringUtils.isNotBlank(dynamicGroup.getOrgIdsList())) {
|
if(StringUtils.isNotBlank(dynamicGroup.getOrgIdsList())) {
|
||||||
String []orgIds = dynamicGroup.getOrgIdsList().split(",");
|
String []orgIds = dynamicGroup.getOrgIdsList().split(",");
|
||||||
@@ -120,23 +95,15 @@ public class GroupsService extends JpaService<Groups>{
|
|||||||
_logger.info("filters include SQL Injection Attack Risk.");
|
_logger.info("filters include SQL Injection Attack Risk.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
filters = filters.replace("&", " AND ");
|
//replace & with AND, | with OR
|
||||||
filters = filters.replace("|", " OR ");
|
filters = filters.replace("&", " AND ").replace("|", " OR ");
|
||||||
|
|
||||||
dynamicGroup.setFilters(filters);
|
dynamicGroup.setFilters(filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isDynamicTimeSupport) {
|
groupMemberService.deleteDynamicMember(dynamicGroup);
|
||||||
if(isBetweenEffectiveTime) {
|
groupMemberService.addDynamicMember(dynamicGroup);
|
||||||
groupMemberService.deleteDynamicMember(dynamicGroup);
|
|
||||||
groupMemberService.addDynamicMember(dynamicGroup);
|
|
||||||
}else {
|
|
||||||
groupMemberService.deleteDynamicMember(dynamicGroup);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
groupMemberService.deleteDynamicMember(dynamicGroup);
|
|
||||||
groupMemberService.addDynamicMember(dynamicGroup);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-37
@@ -20,8 +20,6 @@
|
|||||||
package org.dromara.maxkey.persistence.service;
|
package org.dromara.maxkey.persistence.service;
|
||||||
|
|
||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -36,13 +34,10 @@ import org.slf4j.LoggerFactory;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public class RolesService extends JpaService<Roles> {
|
public class RolesService extends JpaService<Roles> {
|
||||||
static final Logger _logger = LoggerFactory.getLogger(RolesService.class);
|
static final Logger _logger = LoggerFactory.getLogger(RolesService.class);
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
@Autowired
|
@Autowired
|
||||||
RoleMemberService roleMemberService;
|
RoleMemberService roleMemberService;
|
||||||
|
|
||||||
@@ -75,24 +70,6 @@ public class RolesService extends JpaService<Roles> {
|
|||||||
|
|
||||||
public void refreshDynamicRoles(Roles dynamicRole){
|
public void refreshDynamicRoles(Roles dynamicRole){
|
||||||
if(dynamicRole.getCategory().equals(Roles.Category.DYNAMIC)) {
|
if(dynamicRole.getCategory().equals(Roles.Category.DYNAMIC)) {
|
||||||
boolean isDynamicTimeSupport = false;
|
|
||||||
boolean isBetweenEffectiveTime = false;
|
|
||||||
if(StringUtils.isNotBlank(dynamicRole.getResumeTime())
|
|
||||||
&&StringUtils.isNotBlank(dynamicRole.getSuspendTime())
|
|
||||||
&&!dynamicRole.getSuspendTime().equals("00:00")) {
|
|
||||||
LocalTime currentTime = LocalDateTime.now().toLocalTime();
|
|
||||||
LocalTime resumeTime = LocalTime.parse(dynamicRole.getResumeTime());
|
|
||||||
LocalTime suspendTime = LocalTime.parse(dynamicRole.getSuspendTime());
|
|
||||||
|
|
||||||
_logger.info("currentTime: {} , resumeTime : {} , suspendTime: {}" ,
|
|
||||||
currentTime , resumeTime , suspendTime);
|
|
||||||
isDynamicTimeSupport = true;
|
|
||||||
|
|
||||||
if(resumeTime.isBefore(currentTime) && currentTime.isBefore(suspendTime)) {
|
|
||||||
isBetweenEffectiveTime = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if(StringUtils.isNotBlank(dynamicRole.getOrgIdsList())) {
|
if(StringUtils.isNotBlank(dynamicRole.getOrgIdsList())) {
|
||||||
String []orgIds = dynamicRole.getOrgIdsList().split(",");
|
String []orgIds = dynamicRole.getOrgIdsList().split(",");
|
||||||
@@ -117,24 +94,16 @@ public class RolesService extends JpaService<Roles> {
|
|||||||
_logger.info("filters include SQL Injection Attack Risk.");
|
_logger.info("filters include SQL Injection Attack Risk.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
filters = filters.replace("&", " AND ");
|
//replace & with AND, | with OR
|
||||||
filters = filters.replaceAll("\\|", " OR ");
|
filters = filters.replace("&", " AND ").replace("\\|", " OR ");
|
||||||
|
|
||||||
_logger.debug("set filters {}" , filters);
|
_logger.debug("set filters {}" , filters);
|
||||||
dynamicRole.setFilters(filters);
|
dynamicRole.setFilters(filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isDynamicTimeSupport) {
|
roleMemberService.deleteDynamicRoleMember(dynamicRole);
|
||||||
if(isBetweenEffectiveTime) {
|
roleMemberService.addDynamicRoleMember(dynamicRole);
|
||||||
roleMemberService.deleteDynamicRoleMember(dynamicRole);
|
|
||||||
roleMemberService.addDynamicRoleMember(dynamicRole);
|
|
||||||
}else {
|
|
||||||
roleMemberService.deleteDynamicRoleMember(dynamicRole);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
roleMemberService.deleteDynamicRoleMember(dynamicRole);
|
|
||||||
roleMemberService.addDynamicRoleMember(dynamicRole);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,13 +24,8 @@ export class Groups extends BaseEntity {
|
|||||||
category!: String;
|
category!: String;
|
||||||
filters!: String;
|
filters!: String;
|
||||||
orgIdsList!: String;
|
orgIdsList!: String;
|
||||||
resumeTime!: String;
|
|
||||||
suspendTime!: String;
|
|
||||||
isdefault!: String;
|
isdefault!: String;
|
||||||
|
|
||||||
picker_resumeTime: Date = new Date(format(new Date(), 'yyyy-MM-dd 00:00:00'));
|
|
||||||
picker_suspendTime: Date = new Date(format(new Date(), 'yyyy-MM-dd 00:00:00'));
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@@ -40,13 +35,6 @@ export class Groups extends BaseEntity {
|
|||||||
if (this.status == 1) {
|
if (this.status == 1) {
|
||||||
this.switch_status = true;
|
this.switch_status = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.resumeTime != '') {
|
|
||||||
this.picker_resumeTime = new Date(format(new Date(), `yyyy-MM-dd ${this.resumeTime}:00`));
|
|
||||||
}
|
|
||||||
if (this.suspendTime != '') {
|
|
||||||
this.picker_suspendTime = new Date(format(new Date(), `yyyy-MM-dd ${this.suspendTime}:00`));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
override trans(): void {
|
override trans(): void {
|
||||||
if (this.switch_status) {
|
if (this.switch_status) {
|
||||||
@@ -54,12 +42,5 @@ export class Groups extends BaseEntity {
|
|||||||
} else {
|
} else {
|
||||||
this.status = 0;
|
this.status = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.picker_resumeTime) {
|
|
||||||
this.resumeTime = format(this.picker_resumeTime, 'HH:mm');
|
|
||||||
}
|
|
||||||
if (this.picker_suspendTime) {
|
|
||||||
this.suspendTime = format(this.picker_suspendTime, 'HH:mm');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright [2024] [MaxKey of copyright http://www.maxkey.top]
|
* Copyright [2024] [MaxKey of copyright http://www.maxkey.top]
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import format from 'date-fns/format';
|
import format from 'date-fns/format';
|
||||||
|
|
||||||
@@ -27,11 +26,7 @@ export class Roles extends BaseEntity {
|
|||||||
category!: String;
|
category!: String;
|
||||||
filters!: String;
|
filters!: String;
|
||||||
orgIdsList!: String;
|
orgIdsList!: String;
|
||||||
resumeTime!: String;
|
|
||||||
suspendTime!: String;
|
|
||||||
isdefault!: String;
|
isdefault!: String;
|
||||||
picker_resumeTime: Date = new Date(format(new Date(), 'yyyy-MM-dd 00:00:00'));
|
|
||||||
picker_suspendTime: Date = new Date(format(new Date(), 'yyyy-MM-dd 00:00:00'));
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@@ -45,13 +40,6 @@ export class Roles extends BaseEntity {
|
|||||||
} else {
|
} else {
|
||||||
this.switch_status = false;
|
this.switch_status = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.resumeTime != '') {
|
|
||||||
this.picker_resumeTime = new Date(format(new Date(), `yyyy-MM-dd ${this.resumeTime}:00`));
|
|
||||||
}
|
|
||||||
if (this.suspendTime != '') {
|
|
||||||
this.picker_suspendTime = new Date(format(new Date(), `yyyy-MM-dd ${this.suspendTime}:00`));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override trans(): void {
|
override trans(): void {
|
||||||
@@ -60,11 +48,5 @@ export class Roles extends BaseEntity {
|
|||||||
} else {
|
} else {
|
||||||
this.status = 0;
|
this.status = 0;
|
||||||
}
|
}
|
||||||
if (this.picker_resumeTime) {
|
|
||||||
this.resumeTime = format(this.picker_resumeTime, 'HH:mm');
|
|
||||||
}
|
|
||||||
if (this.picker_suspendTime) {
|
|
||||||
this.suspendTime = format(this.picker_suspendTime, 'HH:mm');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-24
@@ -28,30 +28,6 @@
|
|||||||
</nz-radio-group>
|
</nz-radio-group>
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
<nz-form-item *ngIf="form.model.category == 'dynamic'">
|
|
||||||
<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"
|
|
||||||
[ngModelOptions]="{ standalone: true }"
|
|
||||||
nzFormat="HH:mm"
|
|
||||||
name="picker_resumeTime"
|
|
||||||
id="picker_resumeTime"
|
|
||||||
></nz-time-picker>
|
|
||||||
</nz-form-control>
|
|
||||||
</nz-form-item>
|
|
||||||
<nz-form-item *ngIf="form.model.category == 'dynamic'">
|
|
||||||
<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"
|
|
||||||
[ngModelOptions]="{ standalone: true }"
|
|
||||||
nzFormat="HH:mm"
|
|
||||||
name="picker_suspendTime"
|
|
||||||
id="picker_suspendTime"
|
|
||||||
></nz-time-picker>
|
|
||||||
</nz-form-control>
|
|
||||||
</nz-form-item>
|
|
||||||
<nz-form-item *ngIf="form.model.category == 'dynamic'">
|
<nz-form-item *ngIf="form.model.category == '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!">
|
||||||
|
|||||||
+48
-32
@@ -4,8 +4,7 @@
|
|||||||
<nz-form-item class="d-none">
|
<nz-form-item class="d-none">
|
||||||
<nz-form-label [nzMd]="6" nzRequired nzFor="id">{{ 'mxk.text.id' | i18n }}</nz-form-label>
|
<nz-form-label [nzMd]="6" nzRequired nzFor="id">{{ 'mxk.text.id' | i18n }}</nz-form-label>
|
||||||
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!">
|
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid id!">
|
||||||
<input [(ngModel)]="form.model.id" disabled="{{ isEdit }}" [ngModelOptions]="{ standalone: true }" nz-input
|
<input [(ngModel)]="form.model.id" disabled="{{ isEdit }}" [ngModelOptions]="{ standalone: true }" nz-input name="id" id="id" />
|
||||||
name="id" id="id" />
|
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
<nz-form-item>
|
<nz-form-item>
|
||||||
@@ -19,22 +18,26 @@
|
|||||||
<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="roleCode">{{ 'mxk.text.id' | i18n }}</nz-form-label>
|
||||||
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid roleCode!">
|
<nz-form-control [nzMd]="18" nzErrorTip="The input is not valid roleCode!">
|
||||||
<input [(ngModel)]="form.model.roleCode" disabled="{{ isEdit }}" [ngModelOptions]="{ standalone: true }"
|
<input
|
||||||
nz-input name="roleCode" id="roleCode" />
|
[(ngModel)]="form.model.roleCode"
|
||||||
|
disabled="{{ isEdit }}"
|
||||||
|
[ngModelOptions]="{ standalone: true }"
|
||||||
|
nz-input
|
||||||
|
name="roleCode"
|
||||||
|
id="roleCode"
|
||||||
|
/>
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
<nz-form-item>
|
<nz-form-item>
|
||||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
|
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">{{ 'mxk.roles.name' | i18n }}</nz-form-label>
|
||||||
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid minLength!">
|
<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"
|
<input [(ngModel)]="form.model.roleName" [ngModelOptions]="{ standalone: true }" nz-input name="roleName" id="roleName" />
|
||||||
id="roleName" />
|
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
<nz-form-item style="display: none">
|
<nz-form-item style="display: none">
|
||||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">{{ 'mxk.roles.appId' | i18n }}</nz-form-label>
|
<nz-form-label [nzSm]="6" [nzXs]="24" nzRequired nzFor="name">{{ 'mxk.roles.appId' | i18n }}</nz-form-label>
|
||||||
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid minLength!">
|
<nz-form-control [nzSm]="18" [nzMd]="18" [nzXs]="36" [nzXl]="48" nzErrorTip="The input is not valid minLength!">
|
||||||
<input [(ngModel)]="form.model.appId" [ngModelOptions]="{ standalone: true }" nz-input name="roleName"
|
<input [(ngModel)]="form.model.appId" [ngModelOptions]="{ standalone: true }" nz-input name="roleName" id="roleName" />
|
||||||
id="roleName" />
|
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
|
|
||||||
@@ -48,43 +51,56 @@
|
|||||||
</nz-radio-group>
|
</nz-radio-group>
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</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-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid port!">
|
|
||||||
<nz-time-picker [(ngModel)]="form.model.picker_resumeTime" [ngModelOptions]="{ standalone: true }"
|
|
||||||
nzFormat="HH:mm" name="picker_resumeTime" id="picker_resumeTime"></nz-time-picker>
|
|
||||||
</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-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid suspendTime!">
|
|
||||||
<nz-time-picker [(ngModel)]="form.model.picker_suspendTime" [ngModelOptions]="{ standalone: true }"
|
|
||||||
nzFormat="HH:mm" name="picker_suspendTime" id="picker_suspendTime"></nz-time-picker>
|
|
||||||
</nz-form-control>
|
|
||||||
</nz-form-item>
|
|
||||||
<nz-form-item *ngIf="form.model.category == 'dynamic'">
|
<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.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 type="hidden" [(ngModel)]="form.model.orgIdsList" [ngModelOptions]="{ standalone: true }" nz-input
|
<input
|
||||||
name="orgIdsList" id="orgIdsList" />
|
type="hidden"
|
||||||
<nz-tree-select nzVirtualHeight="300px" [nzMaxTagCount]="3" [(ngModel)]="selectValues"
|
[(ngModel)]="form.model.orgIdsList"
|
||||||
[ngModelOptions]="{ standalone: true }" [nzNodes]="treeNodes.nodes" nzCheckable nzPlaceHolder="Please select"
|
[ngModelOptions]="{ standalone: true }"
|
||||||
[nzCheckStrictly]="true">
|
nz-input
|
||||||
|
name="orgIdsList"
|
||||||
|
id="orgIdsList"
|
||||||
|
/>
|
||||||
|
<nz-tree-select
|
||||||
|
nzVirtualHeight="300px"
|
||||||
|
[nzMaxTagCount]="3"
|
||||||
|
[(ngModel)]="selectValues"
|
||||||
|
[ngModelOptions]="{ standalone: true }"
|
||||||
|
[nzNodes]="treeNodes.nodes"
|
||||||
|
nzCheckable
|
||||||
|
nzPlaceHolder="Please select"
|
||||||
|
[nzCheckStrictly]="true"
|
||||||
|
>
|
||||||
</nz-tree-select>
|
</nz-tree-select>
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
<nz-form-item *ngIf="form.model.category == 'dynamic'">
|
<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.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 rows="4" nz-input [(ngModel)]="form.model.filters" [ngModelOptions]="{ standalone: true }" nz-input
|
<textarea
|
||||||
name="filters" id="filters"></textarea>
|
rows="4"
|
||||||
|
nz-input
|
||||||
|
[(ngModel)]="form.model.filters"
|
||||||
|
[ngModelOptions]="{ standalone: true }"
|
||||||
|
nz-input
|
||||||
|
name="filters"
|
||||||
|
id="filters"
|
||||||
|
></textarea>
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
<nz-form-item>
|
<nz-form-item>
|
||||||
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="description">{{ 'mxk.text.description' | i18n }}</nz-form-label>
|
<nz-form-label [nzSm]="6" [nzXs]="24" nzFor="description">{{ 'mxk.text.description' | i18n }}</nz-form-label>
|
||||||
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid encoding!">
|
<nz-form-control [nzSm]="18" [nzXs]="24" nzErrorTip="The input is not valid encoding!">
|
||||||
<textarea rows="4" nz-input [(ngModel)]="form.model.description" [ngModelOptions]="{ standalone: true }"
|
<textarea
|
||||||
nz-input name="description" id="description"></textarea>
|
rows="4"
|
||||||
|
nz-input
|
||||||
|
[(ngModel)]="form.model.description"
|
||||||
|
[ngModelOptions]="{ standalone: true }"
|
||||||
|
nz-input
|
||||||
|
name="description"
|
||||||
|
id="description"
|
||||||
|
></textarea>
|
||||||
</nz-form-control>
|
</nz-form-control>
|
||||||
</nz-form-item>
|
</nz-form-item>
|
||||||
</form>
|
</form>
|
||||||
@@ -93,4 +109,4 @@
|
|||||||
<div *nzModalFooter>
|
<div *nzModalFooter>
|
||||||
<button nz-button nzType="default" (click)="onClose($event)">{{ 'mxk.text.close' | i18n }}</button>
|
<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>
|
<button nz-button nzType="primary" (click)="onSubmit($event)">{{ 'mxk.text.submit' | i18n }}</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+19
@@ -20,11 +20,13 @@ package org.dromara.maxkey.autoconfigure;
|
|||||||
import org.dromara.maxkey.authn.session.SessionManager;
|
import org.dromara.maxkey.authn.session.SessionManager;
|
||||||
import org.dromara.maxkey.configuration.ApplicationConfig;
|
import org.dromara.maxkey.configuration.ApplicationConfig;
|
||||||
import org.dromara.maxkey.listener.DynamicGroupsListenerAdapter;
|
import org.dromara.maxkey.listener.DynamicGroupsListenerAdapter;
|
||||||
|
import org.dromara.maxkey.listener.DynamicRolesListenerAdapter;
|
||||||
import org.dromara.maxkey.listener.ReorgDeptListenerAdapter;
|
import org.dromara.maxkey.listener.ReorgDeptListenerAdapter;
|
||||||
import org.dromara.maxkey.listener.SessionListenerAdapter;
|
import org.dromara.maxkey.listener.SessionListenerAdapter;
|
||||||
import org.dromara.maxkey.persistence.service.ConnectorsService;
|
import org.dromara.maxkey.persistence.service.ConnectorsService;
|
||||||
import org.dromara.maxkey.persistence.service.GroupsService;
|
import org.dromara.maxkey.persistence.service.GroupsService;
|
||||||
import org.dromara.maxkey.persistence.service.OrganizationsService;
|
import org.dromara.maxkey.persistence.service.OrganizationsService;
|
||||||
|
import org.dromara.maxkey.persistence.service.RolesService;
|
||||||
import org.dromara.maxkey.provision.thread.ProvisioningRunner;
|
import org.dromara.maxkey.provision.thread.ProvisioningRunner;
|
||||||
import org.dromara.maxkey.provision.thread.ProvisioningRunnerThread;
|
import org.dromara.maxkey.provision.thread.ProvisioningRunnerThread;
|
||||||
import org.dromara.maxkey.schedule.ScheduleAdapterBuilder;
|
import org.dromara.maxkey.schedule.ScheduleAdapterBuilder;
|
||||||
@@ -85,6 +87,23 @@ public class MaxKeyMgtListenerConfig {
|
|||||||
logger.debug("DynamicGroups ListenerAdapter inited .");
|
logger.debug("DynamicGroups ListenerAdapter inited .");
|
||||||
return "dynamicGroupsListenerAdapter";
|
return "dynamicGroupsListenerAdapter";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
String dynamicRolesListenerAdapter(
|
||||||
|
Scheduler scheduler,
|
||||||
|
RolesService rolesService,
|
||||||
|
@Value("${maxkey.job.cron.schedule}") String cronSchedule
|
||||||
|
) throws SchedulerException {
|
||||||
|
new ScheduleAdapterBuilder()
|
||||||
|
.setScheduler(scheduler)
|
||||||
|
.setCron(cronSchedule)
|
||||||
|
.setJobClass(DynamicRolesListenerAdapter.class)
|
||||||
|
.setJobData("rolesService",rolesService)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
logger.debug("Dynamic Roles ListenerAdapter inited .");
|
||||||
|
return "dynamicRolesListenerAdapter";
|
||||||
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
String provisioningRunnerThread(
|
String provisioningRunnerThread(
|
||||||
|
|||||||
+68
@@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright [2024] [MaxKey of copyright http://www.maxkey.top]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
package org.dromara.maxkey.listener;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import org.dromara.maxkey.persistence.service.RolesService;
|
||||||
|
import org.dromara.maxkey.schedule.ScheduleAdapter;
|
||||||
|
import org.quartz.Job;
|
||||||
|
import org.quartz.JobExecutionContext;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class DynamicRolesListenerAdapter extends ScheduleAdapter implements Job , Serializable {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private static final long serialVersionUID = 7000735366821127880L;
|
||||||
|
|
||||||
|
static final Logger logger = LoggerFactory.getLogger(DynamicRolesListenerAdapter.class);
|
||||||
|
|
||||||
|
transient RolesService rolesService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(JobExecutionContext context){
|
||||||
|
if(jobStatus == JOBSTATUS.RUNNING) {return;}
|
||||||
|
|
||||||
|
init(context);
|
||||||
|
|
||||||
|
logger.debug("running ... " );
|
||||||
|
jobStatus = JOBSTATUS.RUNNING;
|
||||||
|
try {
|
||||||
|
if(rolesService != null) {
|
||||||
|
rolesService.refreshAllDynamicRoles();
|
||||||
|
Thread.sleep(10 * 1000);//10 minutes
|
||||||
|
}
|
||||||
|
logger.debug("finished " );
|
||||||
|
jobStatus = JOBSTATUS.FINISHED;
|
||||||
|
}catch(Exception e) {
|
||||||
|
jobStatus = JOBSTATUS.ERROR;
|
||||||
|
logger.error("Exception " ,e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void init(JobExecutionContext context){
|
||||||
|
super.init(context);
|
||||||
|
if(rolesService == null) {
|
||||||
|
rolesService = getParameter("rolesService",RolesService.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user