package jnpf.dmsPermission;
|
|
import jnpf.base.UserInfo;
|
import jnpf.constant.GlobalConst;
|
import jnpf.permission.RoleApi;
|
import jnpf.permission.entity.RoleEntity;
|
import jnpf.util.UserProvider;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Component;
|
|
import java.util.Collections;
|
import java.util.List;
|
|
@Component
|
@RequiredArgsConstructor
|
public class DmsCurrentIdentity {
|
private final RoleApi roleApi;
|
private final DmsPermissionProperties properties;
|
|
public UserInfo requireUser() {
|
UserInfo user = UserProvider.getUser();
|
if (user == null || isBlank(user.getUserId())) {
|
throw DmsPermissionException.of(DmsPermissionError.AUTH_CONTEXT_REQUIRED,
|
"缺少可信的终端用户认证上下文");
|
}
|
return user;
|
}
|
|
public String tenantId() {
|
return tenantId(requireUser());
|
}
|
|
public String tenantId(UserInfo user) {
|
if (user == null || isBlank(user.getUserId())) {
|
throw DmsPermissionException.of(DmsPermissionError.AUTH_CONTEXT_REQUIRED,
|
"缺少可信的终端用户认证上下文");
|
}
|
return isBlank(user.getTenantId()) ? GlobalConst.DEFAULT_TENANT_VALUE : user.getTenantId().trim();
|
}
|
|
public String userId() {
|
return requireUser().getUserId().trim();
|
}
|
|
public boolean isPermissionAdministrator() {
|
UserInfo user = requireUser();
|
if (Boolean.TRUE.equals(user.getIsAdministrator())) {
|
return true;
|
}
|
List<String> roleIds = user.getRoleIds() == null ? Collections.<String>emptyList() : user.getRoleIds();
|
if (roleIds.isEmpty()) {
|
return false;
|
}
|
List<RoleEntity> roles = roleApi.getListByIds(roleIds);
|
if (roles == null) {
|
return false;
|
}
|
for (RoleEntity role : roles) {
|
if (role != null && properties.getAdminRoleCode().equals(role.getEnCode())) {
|
return true;
|
}
|
}
|
return false;
|
}
|
|
public void requirePermissionAdministrator() {
|
if (!isPermissionAdministrator()) {
|
throw DmsPermissionException.of(DmsPermissionError.ADMIN_REQUIRED,
|
"需要系统管理员或 " + properties.getAdminRoleCode() + " 角色");
|
}
|
}
|
|
private boolean isBlank(String value) {
|
return value == null || value.trim().isEmpty();
|
}
|
}
|