Commit c8ce9cab authored by suntao's avatar suntao

权限 表结构重构

parent 9bfb5f62
...@@ -36,7 +36,7 @@ public class Role extends Primary implements UnaryOperator<Role> { ...@@ -36,7 +36,7 @@ public class Role extends Primary implements UnaryOperator<Role> {
//@Column(name = "permissions") //@Column(name = "permissions")
//private List<Permission> permissions; //private List<Permission> permissions;
/** /**
* 用户角色列表 * 权限
*/ */
@OneToMany(fetch = FetchType.EAGER) @OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "role_permission_mapping", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "permission_id")) @JoinTable(name = "role_permission_mapping", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "permission_id"))
......
package cn.quantgroup.cashloanflowboss.component.security; package cn.quantgroup.cashloanflowboss.component.security;
import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security; import cn.quantgroup.cashloanflowboss.component.security.annotiation.Security;
import cn.quantgroup.cashloanflowboss.core.base.Result;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.core.exception.ApplicationException; import cn.quantgroup.cashloanflowboss.core.exception.ApplicationException;
import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation; import org.aopalliance.intercept.MethodInvocation;
...@@ -19,7 +21,7 @@ public class SecurityInterceptor extends ApplicationObjectSupport implements Met ...@@ -19,7 +21,7 @@ public class SecurityInterceptor extends ApplicationObjectSupport implements Met
Security security = invocation.getMethod().getAnnotation(Security.class); Security security = invocation.getMethod().getAnnotation(Security.class);
if (!this.getApplicationContext().getBean(SecurityHandler.class).doAuthentication(invocation, security.authorityId(), security.authorities())) { if (!this.getApplicationContext().getBean(SecurityHandler.class).doAuthentication(invocation, security.authorityId(), security.authorities())) {
throw new ApplicationException("认证失败"); return Result.buildFial(ApplicationStatus.INVALID_AUTHORITY);
} }
return invocation.proceed(); return invocation.proceed();
......
...@@ -7,10 +7,13 @@ import cn.quantgroup.cashloanflowboss.component.security.SecurityHandler; ...@@ -7,10 +7,13 @@ import cn.quantgroup.cashloanflowboss.component.security.SecurityHandler;
import cn.quantgroup.cashloanflowboss.core.Application; import cn.quantgroup.cashloanflowboss.core.Application;
import cn.quantgroup.cashloanflowboss.core.asserts.Assert; import cn.quantgroup.cashloanflowboss.core.asserts.Assert;
import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus; import cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus;
import cn.quantgroup.cashloanflowboss.utils.JSONTools;
import org.aopalliance.intercept.MethodInvocation; import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -32,13 +35,28 @@ public class ApplicationSecurityHandler implements SecurityHandler { ...@@ -32,13 +35,28 @@ public class ApplicationSecurityHandler implements SecurityHandler {
boolean superAdministrator = principal.isSuperAdministrator(); boolean superAdministrator = principal.isSuperAdministrator();
boolean anyMatch = principal.getRoles().stream().anyMatch(role -> { boolean anyMatch = principal.getRoles().stream().anyMatch(role -> {
Stream<Role> iterate = Stream.iterate(role, Role::getParent); List<Role> roleList = getRoleAndParent(role);
return Objects.nonNull(iterate) && iterate.anyMatch(_role -> this.checkAuthority(authorityId, _role)); return roleList.stream().anyMatch(_role -> this.checkAuthority(authorityId, _role));
}); });
return superAdministrator || anyMatch; return superAdministrator || anyMatch;
} }
private List<Role> getRoleAndParent(Role role) {
if (role == null) {
return new ArrayList<>();
}
List<Role> list = new ArrayList<>();
list.add(role);
while (role.getParent() != null) {
role = role.getParent();
list.add(role);
}
return list;
}
/** /**
* 检查权限 * 检查权限
* *
...@@ -47,7 +65,10 @@ public class ApplicationSecurityHandler implements SecurityHandler { ...@@ -47,7 +65,10 @@ public class ApplicationSecurityHandler implements SecurityHandler {
* @return * @return
*/ */
private boolean checkAuthority(String authorityId, Role role) { private boolean checkAuthority(String authorityId, Role role) {
return Objects.nonNull(role) && CollectionUtils.isNotEmpty(role.getPermissions()) && role.getPermissions().parallelStream().anyMatch(permission -> permission.getName().equals(authorityId)); if (role == null) {
return false;
}
return CollectionUtils.isNotEmpty(role.getPermissions()) && role.getPermissions().parallelStream().anyMatch(permission -> permission.getName().equals(authorityId));
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment