# 功能描述

实现对权限的操作

# Service接口

# 第一步 引入包

<dependency>
    <groupId>sei-cloud</groupId>
    <artifactId>privilege</artifactId>
</dependency>
1
2
3
4

# 第二步 引入接口

@Resource
    PrivilegeService privilegeService;
1
2

# 第三步 使用接口

/**
 * 权限管理
 * @author xiong
 */
public interface PrivilegeService {

    /**
     * 缓存用户权限
     * @param uid: 用户编号, 必须
     * @param moduleID: 可选, 模块编号
     * @param sessionUser: 可选
     */
    void cachePrivilegeByUser(@NonNull String uid, @Nullable String moduleID, @Nullable SessionUser sessionUser);

    /**
     * 移除缓存,不指定uid则表示移除所有用户的权限缓存
     * @param uid: 用户账号
     */
    void removeCachePrivilegeByUser(@Nullable String uid);

    /**
     * 移除缓存,不指定moduleID则表示移除所有用户的权限缓存
     * @param moduleID: 模块编号
     */
    void removeCachePrivilegeOfModuleByUser(@NonNull String moduleID);

    /**
     * 移除指定用户的缓存,不指定moduleID则表示移除该用户的权限缓存
     * @param uid: 用户账号
     * @param moduleID: 模块标识
     */
    void removeCachePrivilegeOfModuleByUser(@NonNull String uid, @Nullable String moduleID);

    /**
     * 获得当前用户指定模块功能权限
     * @param moduleID: 模块编号
     * @param action: Action操作类型
     * @return PrivilegeVo
     * @throws SQLException 异常
     * @throws InstantiationException 异常
     * @throws IntrospectionException 异常
     * @throws IllegalAccessException 异常
     * @throws IllegalArgumentException 异常
     * @throws InvocationTargetException 异常
     */
    PrivilegeVo getPrivilegeByModule(@NonNull String moduleID, @NonNull String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;

    /**
     * 获得指定用户指定模块功能权限
     * @param uid: 用户编号
     * @param moduleID: 模块编号
     * @param action: 操作类型
     * @return PrivilegeVo
     * @throws SQLException 异常
     * @throws InstantiationException 异常
     * @throws IntrospectionException 异常
     * @throws IllegalAccessException 异常
     * @throws IllegalArgumentException 异常
     * @throws InvocationTargetException 异常
     */
    PrivilegeVo getPrivilegeByModule(@Nullable String uid, @NonNull String moduleID, @NonNull String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;

    /**
     * 获得当前用户对指定表的指定权限
     * @param tableName: 表名称
     * @param action: Action操作类型
     * @return PrivilegeVo
     * @throws SQLException 异常
     * @throws InstantiationException 异常
     * @throws IntrospectionException 异常
     * @throws IllegalAccessException 异常
     * @throws IllegalArgumentException 异常
     * @throws InvocationTargetException 异常
     */
    PrivilegeVo getPrivilegeByTable(@NonNull String tableName, @NonNull String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;

    /**
     * 获得指定用户对指定表的指定权限
     * @param uid: 用户账号
     * @param tableName: 表名
     * @param action: Action操作类型
     * @return PrivilegeVo
     * @throws SQLException 异常
     * @throws InstantiationException 异常
     * @throws IntrospectionException 异常
     * @throws IllegalAccessException 异常
     * @throws IllegalArgumentException 异常
     * @throws InvocationTargetException 异常
     */
    PrivilegeVo getPrivilegeByTable(@Nullable String uid, @NonNull String tableName, @NonNull String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;

    /**
     * 获得指定模块的所有权限按钮
     * @param moduleID: 模块编号
     * @param buttonName: 指定的按钮名称(String | Collection)
     * @return Map: 按钮集合
     * @throws SQLException 异常
     */
    Map<String, Object> getPrivilegeButtonsByModule(@NonNull String moduleID, Object... buttonName) throws SQLException;

    /**
     * 获得指定模块的所有权限按钮
     * @param uid: 用户账号
     * @param moduleID: 模块编号
     * @return Map: 按钮集合
     * @throws SQLException 异常
     */
    Map<String, Object> getPrivilegeButtonsByModule(@Nullable String uid, @NonNull String moduleID) throws SQLException;

    /**
     *分析SQL并且给SQL添加权限,返回已经添加了权限的SQL语句
     * @param sql: 要执行的sql语句, 必有并且不能为空
     * @param uid: 用户编号, 可选,如不设置则拿当前登录用户的编号
     * @param module: 模块编号, 可选,如不设置则使用sql语句的操作表所对应的模块,注意一个表对应多个模块的情况
     * @param action: 操作类型, 可选,如不设置则使用sql语句的操作类型
     * @return: String
     * @throws SQLException 异常
     * @throws InstantiationException 异常
     * @throws IntrospectionException 异常
     * @throws IllegalAccessException 异常
     * @throws IllegalArgumentException 异常
     * @throws InvocationTargetException 异常
     */
    String addSQLPrivilege(@NonNull String sql, @Nullable String uid, @Nullable String module, @Nullable String action) throws SQLException, InstantiationException, IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException;

    /**
     * 分析SQLVo并且给SQLVo添加权限,返回false表示无权限
     * @param sqlVo: 要执行的sql语句包装类, 必有并且不能为空
     * @param uid: 用户编号, 可选,如不设置则拿当前登录用户的编号
     * @param module: 模块编号, 可选,如不设置则使用sql语句的操作表所对应的模块,注意一个表对应多个模块的情况
     * @param action: 操作类型, 可选,如不设置则使用sql语句的操作类型
     * @return boolean
     * @throws SQLException 异常
     * @throws InstantiationException 异常
     * @throws IntrospectionException 异常
     * @throws IllegalAccessException 异常
     * @throws IllegalArgumentException 异常
     * @throws InvocationTargetException 异常
     */
    boolean getSQLQueryPrivilege(@NonNull SQLVo sqlVo, @Nullable String uid, @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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141

# 权限注解

针对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