# lucy-rbac
**Repository Path**: lboot/lucy-rbac
## Basic Information
- **Project Name**: lucy-rbac
- **Description**: 基于SaToken的RBAC鉴权管理方案,支持细粒度权限管理
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-12-16
- **Last Updated**: 2024-09-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
> 依赖关系
| lucy-rbac | lucy-spring-boot-starter |
| --------- | ------------------------ |
| 1.0.0 | 1.0.0+ |
## 介绍
`lucy-rbac`是基于`sa-token`鉴权服务框架对`starter`中鉴权服务的服务实现,是权限管理系统的解决方案之一,支持部门、角色、用户、岗位等管理,提供了丰富的API文档。提供了丰富的接口,用户可以基于此进行拓展。
## 准备
在引入任何 `Lucy`系列依赖之前,需要完成`jitpack`镜像仓库的配置。
```xml
jitpack.io
https://www.jitpack.io
```
## 引入
根据依赖关系,决定引入版本号。
```xml
com.gitee.kindear
lucy-spring-boot-starter
${version}
com.gitee.kindear
lucy-rbac
${version}
```
## 配置
> 启动类
启用 `knife4j` 文档,需要在启动类上配置 `@EnableKnife4j`
```java
@EnableKnife4j
@EnableJpaAuditing
@EnableAsync
@EnableCaching
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(LucyAdminApplication.class, args);
}
}
```
> 鉴权框架
`lucy-rbac`提供了默认的配置方案,可以不进行配置,如果需要进行配置,请参阅[文档](https://sa-token.cc/doc.html#/use/config)
**推荐使用配置类完成配置**
``` java
/**
* Sa-Token 配置类
*/
@Configuration
public class SaTokenConfigure {
// Sa-Token 参数配置,参考文档:https://sa-token.cc
// 此配置会覆盖 application.yml 中的配置
@Bean
@Primary
public SaTokenConfig getSaTokenConfigPrimary() {
SaTokenConfig config = new SaTokenConfig();
config.setTokenName("satoken"); // token名称 (同时也是cookie名称)
config.setTimeout(30 * 24 * 60 * 60); // token有效期,单位s 默认30天
config.setActivityTimeout(-1); // token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
config.setIsConcurrent(true); // 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
config.setIsShare(true); // 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
config.setTokenStyle("uuid"); // token风格
config.setIsLog(false); // 是否输出操作日志
return config;
}
}
```
``` java
/**
* Sa-Token 配置类
*/
@Configuration
public class SaTokenConfigure {
// Sa-Token 参数配置,参考文档:https://sa-token.cc
// 此配置会与 application.yml 中的配置合并 (代码配置优先)
@Autowired
public void configSaToken(SaTokenConfig config) {
config.setTokenName("satoken"); // token名称 (同时也是cookie名称)
config.setTimeout(30 * 24 * 60 * 60); // token有效期,单位s 默认30天
config.setActivityTimeout(-1); // token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
config.setIsConcurrent(true); // 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
config.setIsShare(true); // 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
config.setTokenStyle("uuid"); // token风格
config.setIsLog(false); // 是否输出操作日志
}
}
```
两者的区别在于:
- 模式 1 会覆盖 application.yml 中的配置。
- 模式 2 会与 application.yml 中的配置合并(代码配置优先)。
-------
| 参数名称 | 类型 | 默认值 | 说明 |
| ---------------------- | ------- | -------------------- | ------------------------------------------------------------ |
| tokenName | String | satoken | Token 名称 (同时也是 Cookie 名称、数据持久化前缀) |
| timeout | long | 2592000 | Token 有效期,单位/秒 默认30天,-1代表永久有效 [参考:token有效期详解](https://sa-token.cc/doc.html#/fun/token-timeout) |
| activityTimeout | long | -1 | Token 临时有效期 (指定时间内无操作就视为token过期) 单位: 秒, 默认-1 代表不限制 (例如可以设置为1800代表30分钟内无操作就过期) [参考:token有效期详解](https://sa-token.cc/doc.html#/fun/token-timeout) |
| isConcurrent | Boolean | true | 是否允许同一账号并发登录 (为 true 时允许一起登录,为 false 时新登录挤掉旧登录) |
| isShare | Boolean | true | 在多人登录同一账号时,是否共用一个token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token) |
| maxLoginCount | int | 12 | 同一账号最大登录数量,-1代表不限 (只有在 `isConcurrent=true`, `isShare=false` 时此配置才有效),[详解](https://sa-token.cc/doc.html#/use/config?id=配置项详解:maxlogincount) |
| isReadBody | Boolean | true | 是否尝试从 请求体 里读取 Token |
| isReadHeader | Boolean | true | 是否尝试从 header 里读取 Token |
| isReadCookie | Boolean | true | 是否尝试从 cookie 里读取 Token,此值为 false 后,`StpUtil.login(id)` 登录时也不会再往前端注入Cookie |
| isWriteHeader | Boolean | false | 是否在登录后将 Token 写入到响应头 |
| tokenStyle | String | uuid | token风格, [参考:自定义Token风格](https://sa-token.cc/doc.html#/up/token-style) |
| dataRefreshPeriod | int | 30 | 默认数据持久组件实现类中,每次清理过期数据间隔的时间 (单位: 秒) ,默认值30秒,设置为-1代表不启动定时清理 |
| tokenSessionCheckLogin | Boolean | true | 获取 `Token-Session` 时是否必须登录 (如果配置为true,会在每次获取 `Token-Session` 时校验是否登录),[详解](https://sa-token.cc/doc.html#/use/config?id=配置项详解:tokensessionchecklogin) |
| autoRenew | Boolean | true | 是否打开自动续签 (如果此值为true, 框架会在每次直接或间接调用 `getLoginId()` 时进行一次过期检查与续签操作),[参考:token有效期详解](https://sa-token.cc/doc.html#/fun/token-timeout) |
| tokenPrefix | String | null | token前缀,例如填写 `Bearer` 实际传参 `satoken: Bearer xxxx-xxxx-xxxx-xxxx` [参考:自定义Token前缀](https://sa-token.cc/doc.html#/up/token-prefix) |
| isPrint | Boolean | true | 是否在初始化配置时打印版本字符画 |
| isLog | Boolean | false | 是否打印操作日志 |
| jwtSecretKey | String | null | jwt秘钥 (只有集成 `sa-token-temp-jwt` 模块时此参数才会生效),[参考:和 jwt 集成](https://sa-token.cc/doc.html#/plugin/jwt-extend) |
| sameTokenTimeout | long | 86400 | Same-Token的有效期 (单位: 秒),[参考:内部服务外网隔离](https://sa-token.cc/doc.html#/micro/same-token) |
| basic | String | "" | Http Basic 认证的账号和密码 [参考:Http Basic 认证](https://sa-token.cc/doc.html#/up/basic-auth) |
| currDomain | String | null | 配置当前项目的网络访问地址 |
| checkSameToken | Boolean | false | 是否校验Same-Token(部分rpc插件有效) |
| cookie | Object | new SaCookieConfig() | Cookie配置对象 |
Cookie相关配置:
| 参数名称 | 类型 | 默认值 | 说明 |
| -------- | ------- | ------ | ------------------------------------------------------------ |
| domain | String | null | 作用域(写入Cookie时显式指定的作用域, 常用于单点登录二级域名共享Cookie的场景) |
| path | String | / | 路径,默认写在域名根路径下 |
| secure | Boolean | false | 是否只在 https 协议下有效 |
| httpOnly | Boolean | false | 是否禁止 js 操作 Cookie |
| sameSite | String | Lax | 第三方限制级别(Strict=完全禁止,Lax=部分允许,None=不限制) |