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 roleIds = user.getRoleIds() == null ? Collections.emptyList() : user.getRoleIds(); if (roleIds.isEmpty()) { return false; } List 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(); } }