Commit 4154b98c authored by 王俊权's avatar 王俊权

Merge remote-tracking branch 'origin/v1' into v1

parents e92d8075 c8ce9cab
...@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor; ...@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.util.List; import java.util.List;
/** /**
...@@ -13,16 +14,33 @@ import java.util.List; ...@@ -13,16 +14,33 @@ import java.util.List;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Entity
@Table(name = "permission")
public class Permission { public class Permission {
/**
* 主键id
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/** /**
* 授权ID * 授权ID
*/ */
private String id; @Column(name = "name")
private String name;
/**
* 权限描述
*/
@Column(name = "desc")
private String desc;
/** /**
* 权利 * 权利 读 写 修改 删除 暂时不用
*/ */
private List<Authority> authorities; //@Convert(converter = PermissionListConverter.class)
//@Column(name = "permissions")
//private List<Authority> authorities;
} }
...@@ -5,6 +5,7 @@ import lombok.Data; ...@@ -5,6 +5,7 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.function.UnaryOperator; import java.util.function.UnaryOperator;
/** /**
...@@ -31,9 +32,16 @@ public class Role extends Primary implements UnaryOperator<Role> { ...@@ -31,9 +32,16 @@ public class Role extends Primary implements UnaryOperator<Role> {
/** /**
* 授权列表 * 授权列表
*/ */
@Convert(converter = PermissionListConverter.class) //@Convert(converter = PermissionListConverter.class)
@Column(name = "permissions") //@Column(name = "permissions")
private List<Permission> permissions; //private List<Permission> permissions;
/**
* 权限
*/
@OneToMany(fetch = FetchType.EAGER)
@JoinTable(name = "role_permission_mapping", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "permission_id"))
private Set<Permission> permissions;
@Override @Override
public Role apply(Role role) { public Role apply(Role role) {
......
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,9 +7,13 @@ import cn.quantgroup.cashloanflowboss.component.security.SecurityHandler; ...@@ -7,9 +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.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;
...@@ -28,8 +32,29 @@ public class ApplicationSecurityHandler implements SecurityHandler { ...@@ -28,8 +32,29 @@ public class ApplicationSecurityHandler implements SecurityHandler {
Assert.isNull(principal, ApplicationStatus.AUTHENTICATION_FAILURE); Assert.isNull(principal, ApplicationStatus.AUTHENTICATION_FAILURE);
// 如果是超级管理员跳过权限验证 // 如果是超级管理员跳过权限验证
return principal.isSuperAdministrator() || principal.getRoles().stream().anyMatch(role -> Stream.iterate(role, Role::getParent).anyMatch(_role -> this.checkAuthority(authorityId, _role))); boolean superAdministrator = principal.isSuperAdministrator();
boolean anyMatch = principal.getRoles().stream().anyMatch(role -> {
List<Role> roleList = getRoleAndParent(role);
return roleList.stream().anyMatch(_role -> this.checkAuthority(authorityId, _role));
});
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;
} }
/** /**
...@@ -40,7 +65,10 @@ public class ApplicationSecurityHandler implements SecurityHandler { ...@@ -40,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.getPermissions()) && role.getPermissions().parallelStream().anyMatch(permission -> permission.getId().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