写点什么

夜莺二次开发指南 - 用户资源中心

用户头像
qinyening
关注
发布于: 2021 年 01 月 13 日
夜莺二次开发指南-用户资源中心

前言

本系列将对夜莺平台各个模块的主要逻辑进行介绍,方便大家进行二次开发,本篇是系列的第四篇,用户资源中心模块

首先贴下夜莺的项目地址和架构图,正在使用夜莺的读者欢迎给夜莺加一个 star


本节主要讲解用户资源中心的 RDB 模块,RDB 模块是夜莺平台的基座,提供了用户信息、组织资源树、用户权限等功能,关于功能的介绍可以到 bilibili 观看视频,这些功能的实现都比较简单,大家可以直接看 http/router.go 的代码 ,里面列举了 rdb 的所有 http 接口,本篇主要介绍下第三方系统如何来接入夜莺平台

用户认证接入

夜莺提供了一套完整的用户体系,其他系统可以通过接入夜莺的用户认证来复用夜莺的用户体系。下面介绍一下接入用户认证的流程


  1. 首先待接入系统 A 和夜莺平台的 cookie 要可以复用

  2. 当用户在夜莺平台登录之后,会把和用户相关的 sessionId 写入到 cookie 中,当用户再访问接入系统 A 时,系统 A 从 cookie 里可以拿到 sessionId,cookie 的 key 为 ecmc-sid

  3. 通过调研 rdb 提供的接口,查询用户的用户名,如果能查询说明用户是合法的而且已经登录了,如果查不到则说明用户没有登陆,可以让前端将页面跳转到夜莺的登陆页面


根据 sessionId 查询用户信息的接口如下

v1.GET("/sessions/:sid", v1SessionGet) //查询用户名v1.GET("/sessions/:sid/user", v1SessionGetUser) //查询用户信息
复制代码

关于用户信息这里展开说一下,首先看下用户的数据结构

type User struct {    Id           int64     `json:"id"`    UUID         string    `json:"uuid" xorm:"'uuid'"`    Username     string    `json:"username"`    Organization string    `json:"organization"`    IsRoot       int       `json:"is_root"`    LeaderId     int64     `json:"leader_id"`    LeaderName   string    `json:"leader_name"`    //...}
复制代码


User 数据结构中提供了一个 LeaderId 字段,可以设置用户 leader 是谁,这样就具备了简单的企业组织结构的表达能力,在一些审批和升级事件中可以使用这个字段,User 数据结构中还有一个 Organization 字段,所以可以根据 LeaderId 和 Organization 绘制出公司的人员组织结构,大家有需要可以自己实现这个功能。

资源接入

夜莺使用组织资源树的方式来管理资源,夜莺平台的用户权限、告警策略、采集策略都是基于组织资源树来设计的。夜莺的目标是成为基础架构平台底座,让大家可以基于夜莺开发适合公司自己的基础平台。所以为了可以让各种 PAAS 类平台接入到夜莺平台,我们抽象了租户和项目两个特殊的节点类别。简单的节点组织方式可以为:租户--->项目--->模块,复杂一点的可以是:租户--->组织--->项目--->模块--->集群。


下面介绍下,第三方系统如何把资源自动注册到夜莺平台,夜莺提供了专门的资源注册和销毁的接口

// RDB作为一个类似CMDB的东西,接收各个子系统注册过来的资源,其他资源都是依托于项目创建的,RDB会根据nid自动挂载资源到相应节点v1.POST("/resources/register", v1ResourcesRegisterPost)// 资源销毁的时候,需要从库里清掉,同时需要把节点挂载关系也删除,一个资源可能挂载在多个节点,都要统统干掉v1.POST("/resources/unregister", v1ResourcesUnregisterPost)
复制代码


拿 RDS 平台接入夜莺举例,RDS 平台需要把用户创建的 RDS 实例和夜莺的项目节点绑定起来,夜莺提供了 /tree/projs 的接口,只展示用户拥有权限的项目节点,RDS 平台的前端页面可以调用这个接口,在用户创建 RDS 实例时,先让用户选择项目节点,这样就可以把实例和项目节点关联起来,等实例创建好之后,RDS 平台可以调用夜莺的资源注册接口,把 RDS 资源注册到夜莺的服务树上面。下面是 rds 注册到 rdb 之后的截图



通过这种方式,RDS 平台可以直接复用夜莺的权限管理能力和告警监控能力,将 RDS 实例的英文标识作为 endpoint 上报监控到夜莺之后,可以直接在夜莺平台查看监控和配置告警。

权限接入

通过上文 RDS 平台将资源绑定到节点之后,就可以复用夜莺的权限管理体系了,夜莺提供了两类页面,一类是页面角色,一类是资源角色。

如果系统有些页面或者按钮只可以给管理员看到,不能让普通用户看到,这个时候可以使用页面角色来配置权限


资源角色在涉及到某些资源相关的操作权限时使用,首先资源角色在配置的时候,需要框定一个范围,这个范围就是服务节点,也就是上文提到的项目节点,通过在某个项目节点给某个用户赋予某个角色,来控制该用户是否有权限来对 RDS 资源进行操作。

下面介绍下集成步骤


  1. 待接入的平台要梳理自己的业务,看哪些页面/操作需要受权限管控,每个页面/操作用一个权限点表示(底层实现是一个字符串,比如 rds_instance_write 表示 RDS 平台对项目下资源的写操作权限)

  2. 将梳理好的权限点,添加到 rdb 的配置文件lop.yml 和 gop.yml 中

  3. 根据平台的使用场景,创建相关的角色并配置好权限点

  4. 当用户在接入的平台操作时,比如在某个项目下创建 rds 实例,可以根据项目 id+用户名+权限点调用 rdb 的权限校验接口,来校验用户是否有权限做此操作,查询样例如下


curl -H "X-Srv-Token: rdb-builtin-token" 'http://rdb.addr:8000/v1/rdb/can-do-node-op?nid=1&username=root&op=rdb_perm_grant'{"dat":true,"err":""}
复制代码


本篇文章到此就结束了,下篇将为大家介绍资产管理平台(AMS)模块

作者简介

秦叶宁 企业级开源运维平台 Nightingale 主程,Urlooker 作者,现负责滴滴私有云运维产品方向的工作,如有运维平台的搭建需求,欢迎与我联系:)


发布于: 2021 年 01 月 13 日阅读数: 351
用户头像

qinyening

关注

-_- 2018.03.16 加入

微信 qinyening2100,欢迎交流:)

评论

发布
暂无评论
夜莺二次开发指南-用户资源中心