# 功能描述

实现对权限的操作

# 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 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

# 权限注解

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