Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cash-loan-flow-boss
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QG
cash-loan-flow-boss
Commits
4154b98c
Commit
4154b98c
authored
Sep 18, 2019
by
王俊权
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/v1' into v1
parents
e92d8075
c8ce9cab
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
65 additions
and
9 deletions
+65
-9
Permission.java
...antgroup/cashloanflowboss/api/role/entity/Permission.java
+21
-3
Role.java
.../cn/quantgroup/cashloanflowboss/api/role/entity/Role.java
+11
-3
SecurityInterceptor.java
...hloanflowboss/component/security/SecurityInterceptor.java
+3
-1
ApplicationSecurityHandler.java
...owboss/core/configuration/ApplicationSecurityHandler.java
+30
-2
No files found.
src/main/java/cn/quantgroup/cashloanflowboss/api/role/entity/Permission.java
View file @
4154b98c
...
...
@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.persistence.*
;
import
java.util.List
;
/**
...
...
@@ -13,16 +14,33 @@ import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table
(
name
=
"permission"
)
public
class
Permission
{
/**
* 主键id
*/
@Id
@GeneratedValue
(
strategy
=
GenerationType
.
IDENTITY
)
private
Long
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;
}
src/main/java/cn/quantgroup/cashloanflowboss/api/role/entity/Role.java
View file @
4154b98c
...
...
@@ -5,6 +5,7 @@ import lombok.Data;
import
javax.persistence.*
;
import
java.util.List
;
import
java.util.Set
;
import
java.util.function.UnaryOperator
;
/**
...
...
@@ -31,9 +32,16 @@ public class Role extends Primary implements UnaryOperator<Role> {
/**
* 授权列表
*/
@Convert
(
converter
=
PermissionListConverter
.
class
)
@Column
(
name
=
"permissions"
)
private
List
<
Permission
>
permissions
;
//@Convert(converter = PermissionListConverter.class)
//@Column(name = "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
public
Role
apply
(
Role
role
)
{
...
...
src/main/java/cn/quantgroup/cashloanflowboss/component/security/SecurityInterceptor.java
View file @
4154b98c
package
cn
.
quantgroup
.
cashloanflowboss
.
component
.
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
org.aopalliance.intercept.MethodInterceptor
;
import
org.aopalliance.intercept.MethodInvocation
;
...
...
@@ -19,7 +21,7 @@ public class SecurityInterceptor extends ApplicationObjectSupport implements Met
Security
security
=
invocation
.
getMethod
().
getAnnotation
(
Security
.
class
);
if
(!
this
.
getApplicationContext
().
getBean
(
SecurityHandler
.
class
).
doAuthentication
(
invocation
,
security
.
authorityId
(),
security
.
authorities
()))
{
throw
new
ApplicationException
(
"认证失败"
);
return
Result
.
buildFial
(
ApplicationStatus
.
INVALID_AUTHORITY
);
}
return
invocation
.
proceed
();
...
...
src/main/java/cn/quantgroup/cashloanflowboss/core/configuration/ApplicationSecurityHandler.java
View file @
4154b98c
...
...
@@ -7,9 +7,13 @@ import cn.quantgroup.cashloanflowboss.component.security.SecurityHandler;
import
cn.quantgroup.cashloanflowboss.core.Application
;
import
cn.quantgroup.cashloanflowboss.core.asserts.Assert
;
import
cn.quantgroup.cashloanflowboss.core.dictionary.ApplicationStatus
;
import
cn.quantgroup.cashloanflowboss.utils.JSONTools
;
import
org.aopalliance.intercept.MethodInvocation
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.springframework.context.annotation.Configuration
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.stream.Stream
;
...
...
@@ -28,8 +32,29 @@ public class ApplicationSecurityHandler implements SecurityHandler {
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 {
* @return
*/
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
));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment