Skip to content

[Feature]: 权限控制 #113

@lbzss

Description

@lbzss

cit965 Web端版本

NA

cit965 Server端版本

NA

功能描述以及必要性描述

需要定义系统中的角色并对其进行访问控制。

建议和方案

设计文档

权限控制使用casbin来实现,基于RBAC with domain来实现。使用ent-casbin集成数据库存储权限控制文件。

model.conf
默认都处于kubecit domain

# Request definition 请求中需要包含sub(访问实体),dom(域,默认为kubecit),obj(访问的资源),action(访问的方法),eft为默认值allow
[request_definition]
r = sub, dom, obj, act

# Policy definition 策略为预定义内容,承载于数据库,定义了访问规则
[policy_definition]
p = sub, dom, obj, act

# Policy effect 表明只要有一条策略符合则权限通过
[policy_effect]
e = some(where (p.eft == allow))

# Role definition 角色定义,表示前者在后者中拥有中间定义的角色
[role_definition] 
g = _, _, _

# Matchers 匹配规则,访问实体在域中有策略中定义的权限,请求体中的域与策略中的域相同,请求中的对象与策略中的对象相同,请求中的动作与策略中的动作相同
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

角色定义

  • UserRoleUnknown // 未知用户(是否需要)
  • UserRoleGuest // 访客
  • UserRoleRegisterUser // 注册用户
  • UserRoleLecturer // 讲师
  • UserRoleAdmin // 管理员
  • UserRoleSuperAdmin // 超级管理员

流程

image

  • 未登录状态下的用户默认权限为UserRoleGuest
  • 用户注册或使用接口登录后角色为UserRoleRegisterUser
  • 讲师注册或使用接口登录后角色为UserRoleLecturer
  • 管理员UserRoleAdmin需要超级管理员对用户角色进行提权修改角色为管理员
  • 超级管理员UserRoleSuperAdmin系统中默认存在,不可注册

接口权限

Role Path Policy
UserRoleGuest 用户登录、用户注册、查询课程、查询讲师、观看预览课程 allow
UserRoleRegisterUser 退出登录、订单创建、查看、修改、删除、支付、观看课程 allow
UserRoleLecturer 课程增删改查、小节增删改查、讲师信息更新 allow
UserRoleAdmin 课程审核、订单查询、用户查询、充值记录查询 allow
UserRoleSuperAdmin * allow

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    Status

    👀 In review

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions