[开源]一个简约的权限管理系统、资源授权管理中心、权限控制中台
开源系统流程管理
![[开源]一个简约的权限管理系统、资源授权管理中心、权限控制中台](https://yy123.ink/api/img/1782585576510-kgpdol.jpg)
一、开源项目简介
Grit(聚沙成堆...)
权限管理系统,或者资源授权管理中心,或者权限控制中台
二、开源协议
使用Apache-2.0开源协议
三、界面展示



四、功能概述
功能主要包括:
- 资源管理
- 资源空间(相当于应用系统)
- 资源组(相当于频道、模块)
- 资源
- 可见(相当于菜单)
- 可不见(相当于权限码)
- 主体管理
- 主体组
- 可见(相当于企业、机构、部门)
- 不可见(相当于角色)
- 主体(相当于登录用户)
五、技术选型
开始
了解框架与构件
开发框架
说明
grit.client
grit 接口申明及数据实体定义。支持Remote调用与Local调用
grit-solon-solon
grit.client 与 solon.auth 集成
grit.server
grit.client 接口实现(可做为插件集成到别的服务)
grit.server.ui-durian
grit.server + 管理界面实现(可做为插件集成到别的管理后台)
镜像输出
说明
noearorg/gritdock:1.4.2
Grit 权限管理、接口服务及菜单导航服务
单体项目,可通过 grit.server.ui-durian 集成,直接获取客户端接口与管理能力
开发应用
1)配置
- pom.xml / mevan 配置
<!-- 客户端版本 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>grit.client</artifactId>
<version>1.4.2</version>
</dependency>
<!-- solon cloud 集成版本(也可用于 Spring boot 项目) -->
<!-- 用的时候再加个配置服务的插件,例如:water-solon-cloud-plugin -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>grit-solon-plugin</artifactId>
<version>1.4.2</version>
</dependency>
- app.yml / 配置说明
solon.app:
name: "demoadmin"
group: "demo"
solon.cloud.water:
server: "waterapi:9371" #WATER服务地址
config:
load: "grit:gritclient.yml" #加载gritclient的配置
2)代码
//1,定义认证处理器
public class AuthProcessorImpl extends GritAuthProcessor {
}
//2,配置验证规则
@Configuration
public class DemoConfig{
@Bean
public void initAuth() {
//适配认证框架
AuthUtil.adapter()
.loginUrl("/login")
.addRule(r -> r.include("**").verifyIp().failure((c, t) -> c.output(c.realIp() + ", not whitelist"))) //增加ip白名单验证规则
.addRule(r -> r.exclude("/login**").exclude(HealthHandler.HANDLER_PATH).exclude("/_**").verifyPath()) //增加uri验证规则
.processor(new AuthProcessorImpl()) //绑定验证处理器
.failure((ctx, rst) -> {
ctx.outputAsJson(new ONode().set("code", 403).set("msg", "你,没有权限哟!").toJson());
});
}
}
//3,登录示例
@Controller
public class LoginController{
@Mapping("/login")
public Result login(String userName, String userPassword){
//尝试登录
Subject subject = GritClient.global().auth().login(userName, userPassword);
if (Subject.isEmpty(subject)) {
return Result.failure("提示:账号或密码不对!");
} else {
//加载用户主体信息到会话状态
Session.current().loadSubject(subject);
//找到用户有权限的一个可见uri
Resource res = GritClient.global().auth().getUriFrist(subject.subject_id);
if (Utils.isEmpty(res.link_uri)) {
//如果没找到
return Result.failure("提示:请联系管理员开通权限!");
} else {
//如果找到,让前端到跳到目标地址
String resUrl = GritUtil.buildDockUri(res);
return Result.succeed(resUrl);
}
}
}
}
//4,权限控制示例
@Controller
public class DemoController{
//注解模式
@AuthPermissions("demo:admin")
public void demo_ajax_del(String key){
//删除操作,有 demo:admin 权限的人才能操作
}
//代码模式
public void demo_ajax_del2(String key){
//删除操作,有 demo:admin 权限的人才能操作
if(GritClient.global().auth().hasPermission(subject_id, "demo:admin")){
return;
}
}
}
//5,构建动态菜单的示例
@Component("view:header")
public class HeaderTag implements TemplateDirectiveModel{
public void execute(){
//获取用户有权限的可见uri分组
List<ResourceGroup> groupList = GritClient.global().auth().getUriGroupList(subjectId);
//获取分组的uri资源列表(内部是虚拟树)
List<ResourceEntity> list = GritClient.global().auth().getUriListByGroup(subjectId, group.resource_id);
//获取分组的第一个uri资源
ResourceEntity frist = GritClient.global().auth().getUriFristByGroup(subjectId, group.resource_id);
}
}
两种部署模式:
一、基于配置服务部署(以 water 为例)
- water_docker-compose :基于 water 的 docker-compose 部署模式
- water_k8s :基于 water 的 k8s 部署模式
二、基于数据源部署
请自建数据库:grit,并通过 grit.sql 初始化数据结构
- ds_docker-compose :基于数据源部署的 docker-compose 部署模式
- ds_k8s :基于数据源部署的 k8s 部署模式
镜像列表
镜像
镜像端口
说明
noearorg/gritdock:1.4.2
7281
管理控制台
附:LDAP登录支持:
- 基于 water 环境
# 配置项 grit/grit.yml ,添加 ldap 连接配置: grit.ldap: url: "ldap://127.0.0.1" baseDn: "DC=company,DC=com" bindDn: "cn=admin,dc=company,dc=com" paasword: "123456" userFilter: "cn=%s" groupFilter: "cn=%s"
- 自建数据源
将上面的配置做为 gritdock 的环境变量添加即可
评论