# 功能描述
实现对权限的操作
# Service接口
# 第一步 引入包
<dependency>
<groupId>sei-cloud</groupId>
<artifactId>privilege</artifactId>
</dependency>
1
2
3
4
2
3
4
# 第二步 引入接口
@Resource
PrivilegeService privilegeService;
1
2
2
# 第三步 使用接口
/**
* 权限管理
* @author xiong
*/
public interface PrivilegeService {
/**
* 缓存指定用户的权限
* @param sessionUser: 必须,登录用户信息
* @param moduleID: 可选,模块编号,为空则缓存所有模块
*/
void cachePrivilegeByUser(@NonNull SessionUser sessionUser, @Nullable String moduleID);
/**
* 移除指定用户(或全部用户)的权限缓存
* @param uid: 可选,用户账号,为空则清除所有用户权限缓存
*/
void removeCachePrivilegeByUser(@Nullable String uid);
/**
* 移除指定(或全部)模块权限缓存
* @param moduleID: 可选,模块编号,为空则移除所有模块的权限缓存
*/
void removeCachePrivilegeOfModuleByUser(@Nullable String moduleID);
/**
* 移除指定用户(或全部用户)的模块权限缓存
* @param uid: 必须,用户账号
* @param moduleID: 可选,模块编号,为null则移除该用户的所有模块权限缓存
*/
void removeCachePrivilegeOfModuleByUser(@NonNull String uid, @Nullable String moduleID);
/**
* 获得当前用户指定模块功能权限
* @param moduleID: 必须,模块编号
* @param action: 必须,Action操作类型
* @return PrivilegeVo
* @throws SQLException 异常
* @throws IllegalArgumentException 异常
*/
PrivilegeVo getPrivilegeByModule(@NonNull String moduleID, @NonNull String action) throws SQLException, IllegalArgumentException;
/**
* 获得当前用户对指定表的指定权限
* @param tableName: 必须,表名称
* @param action: 必须,Action操作类型
* @return PrivilegeVo
* @throws SQLException 异常
* @throws IllegalArgumentException 异常
*/
PrivilegeVo getPrivilegeByTable(@NonNull String tableName, @NonNull String action) throws SQLException, IllegalArgumentException;
/**
* 获得指定模块的所有权限按钮
* @param moduleID: 必须,模块编号
* @param buttonName: 可选,指定的按钮名称(String | Collection)
* @return Map: 按钮集合
* @throws SQLException 异常
*/
Map<String, Object> getPrivilegeButtonsByModule(@NonNull String moduleID, Object... buttonName) throws SQLException;
/**
*分析SQL并且给SQL添加权限,返回已经添加了权限的SQL语句
* @param sql: 必须,要执行的sql语句
* @param module: 可选,模块编号,为null则使用sql语句的操作表所对应的模块,注意一个表对应多个模块的情况
* @param action: 可选,操作类型,为null则使用sql语句的操作类型
* @return: String
* @throws SQLException 异常
* @throws InstantiationException 异常
* @throws IntrospectionException 异常
* @throws IllegalAccessException 异常
* @throws IllegalArgumentException 异常
* @throws InvocationTargetException 异常
*/
String addSQLPrivilege(@NonNull String sql, @Nullable String module, @Nullable String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;
/**
* 分析SQLVo并且给SQLVo添加权限,返回false表示无权限
* @param sqlVo: 必须,要执行的sql语句包装类
* @param module: 可选,模块编号,为null则使用sql语句的操作表所对应的模块,注意一个表对应多个模块的情况
* @param action: 可选,操作类型,为null则使用sql语句的操作类型
* @return boolean
* @throws SQLException 异常
* @throws InstantiationException 异常
* @throws IntrospectionException 异常
* @throws IllegalAccessException 异常
* @throws IllegalArgumentException 异常
* @throws InvocationTargetException 异常
*/
boolean getSQLQueryPrivilege(@NonNull SQLVo sqlVo, @Nullable String module, @Nullable String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# 权限注解
针对mybatis的各种操作,系统提供了@Privilege权限注解简化程序员编程。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Privilege {
/**
* 操作类型(模块的功能点),如果未设置,系统将分析sql类型从而获得操作类型
* @return String
*/
String action() default "";
/**
* 如果未设置action,是否从SQL语句中提取SQL语句类型作为action
* @return boolean
*/
boolean autoAction() default true;
/**
* 模块可以不设置,当不设置的时候,而且getFromParameter设置为true的时候,系统将从参数中查找变量为module名称的值作为模块名称
* @return String
*/
String module() default "";
/**
* 用户id可以不设置,当不设置的时候,系统会以当前登录人的用户id进行权限判断
* 注意: 一般用于调试,运行时不应该设置
* @return String
*/
String user() default "";
/**
* 如果用户不设置module模块名称,是否从方法的参数中获取参数名称为module的值作为模块编号
* 注意: 仅作用于方法上并且对 mybatis 无效
* @return boolean
*/
boolean autoModuleByParam() default false;
/**
* 如果用户不设置module模块名称,是否从要执行的sql获得表对应的模块
* @return boolean
*/
boolean autoModuleBySQL() default true;
/**
* 不做权限判断的方法名称(仅注解在类上有效)
* 注意: 对重载方法有效, 设置此值后就只对方法名称在列表中的方法不进行权限判断,其余方法都要判断
* @return String[]
*/
String[] excludeMethodNames() default {};
/**
* 要执行判断的方法名称(仅注解在类上有效)
* 注意: 对重载方法有效, 设置此值后就只对方法名称在列表中的方法进行权限判断,其余方法都不判断
* @return String[]
*/
String[] includeMethodNames() default {};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57