首页 > 其他分享 >后端技术:基于角色的访问控制(RBAC)系统的快速理解

后端技术:基于角色的访问控制(RBAC)系统的快速理解

时间:2023-12-27 19:13:29浏览次数:43  
标签:description 角色 访问控制 fields RBAC length max CharField True

参考文章:

RBAC权限系统分析、设计与实现:https://cloud.tencent.com/developer/article/1802329

基于角色的访问控制(RBAC)系统的快速理解

image-20231227173233592

rbac系统的基本理解:

在RBAC系统中,通常涉及角色(Role)、用户(User)和权限(Access)等概念。下面是对每个模型的解释:

在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。

  1. 权限 (Access | Permission):访问权限,如:修改用户信息,是否VIP。。。
  2. 角色 (Role):不同的角色有不同的权限。
  3. 用户 (User):每个用户都有唯一的UID识别,并被赋于不同的角色。

角色、用户和权限之间的关系通过多对多关联表现,允许灵活的权限管理。

python具体实现rbac:

首先实现的是Role

from tortoise.models import Model

class TimestampMixin(Model):
    create_time = fields.DatetimeField(auto_now_add=True, description='创建时间')
    update_time = fields.DatetimeField(auto_now=True, description="更新时间")

    class Meta:
        table = None


class Role(TimestampMixin):
    role_name = fields.CharField(max_length=15, description="角色名称")
    user: fields.ManyToManyRelation["User"] = \
        fields.ManyToManyField("base.User", related_name="role", on_delete=fields.CASCADE)
    access: fields.ManyToManyRelation["Access"] = \
        fields.ManyToManyField("base.Access", related_name="role", on_delete=fields.CASCADE)
    role_status = fields.BooleanField(default=False, description="True:启用 False:禁用")
    role_desc = fields.CharField(null=True, max_length=255, description='角色描述')

    class Meta:
        table_description = "角色表"
        table = "role"

进行一个具体的解释:

1. TimestampMixin

  • TimestampMixin 是一个混入类(Mixin),它为其他模型提供了时间戳字段。
  • 包含两个字段:create_time(创建时间)和 update_time(更新时间),它们分别记录了记录的创建和最后更新时间。
  • 作为混入类,TimestampMixin 不映射到数据库中的独立表。

2. Role

  • Role 类代表了系统中的角色。
  • 继承了 TimestampMixin,因此包含时间戳字段。
  • 包含字段如 role_name(角色名称),role_status(角色状态,表示启用或禁用)和 role_desc(角色描述)。
  • 定义了与 UserAccess 的多对多关系,表示用户可以拥有多个角色,角色可以有多个权限。

注意:from tortoise.models import Model这里是导入modelsModel

继续实现User

class User(TimestampMixin):
    role: fields.ManyToManyRelation[Role]
    username = fields.CharField(null=True, max_length=20, description="用户名")
    user_type = fields.BooleanField(default=False, description="用户类型 True:超级管理员 False:普通管理员")
    password = fields.CharField(null=True, max_length=255)
    nickname = fields.CharField(default='user01', max_length=255, description='昵称')
    user_phone = fields.CharField(null=True, description="手机号", max_length=11)
    user_email = fields.CharField(null=True, description='邮箱', max_length=255)
    full_name = fields.CharField(null=True, description='姓名', max_length=255)
    user_status = fields.IntField(default=0, description='0未激活 1正常 2禁用')
    header_img = fields.CharField(null=True, max_length=255, description='头像')
    sex = fields.IntField(default=0, null=True, description='0未知 1男 2女')
    remarks = fields.CharField(null=True, max_length=30, description="备注")
    client_host = fields.CharField(null=True, max_length=19, description="访问IP")

    class Meta:
        table_description = "用户表"
        table = "user"

具体的代码理解:

1. User

  • User 类代表了系统中的用户。
  • 继承了 TimestampMixin
  • 包含多个字段,如 username(用户名),password(密码),user_phone(手机号)等,描述用户的基本信息。
  • role 字段定义了与 Role 的多对多关系。

最后是权限 Access

class Access(TimestampMixin):
    role: fields.ManyToManyRelation[Role]
    access_name = fields.CharField(max_length=15, description="权限名称")
    parent_id = fields.IntField(default=0, description='父id')
    scopes = fields.CharField(unique=True, max_length=255, description='权限范围标识')
    access_desc = fields.CharField(null=True, max_length=255, description='权限描述')
    menu_icon = fields.CharField(null=True, max_length=255, description='菜单图标')
    is_check = fields.BooleanField(default=False, description='是否验证权限 True为验证 False不验证')
    is_menu = fields.BooleanField(default=False, description='是否为菜单 True菜单 False不是菜单')

    class Meta:
        table_description = "权限表"
        table = "access"


class AccessLog(TimestampMixin):
    user_id = fields.IntField(description="用户ID")
    target_url = fields.CharField(null=True, description="访问的url", max_length=255)
    user_agent = fields.CharField(null=True, description="访问UA", max_length=255)
    request_params = fields.JSONField(null=True, description="请求参数get|post")
    ip = fields.CharField(null=True, max_length=32, description="访问IP")
    note = fields.CharField(null=True, max_length=255, description="备注")

    class Meta:
        table_description = "用户操作记录表"
        table = "access_log"

具体理解:

1. Access

  • Access 类代表了系统中的权限。
  • 继承了 TimestampMixin
  • 包含字段如 access_name(权限名称)和 scopes(权限范围标识),用于定义权限的具体内容。
  • role 字段定义了与 Role 的多对多关系。

2. AccessLog

  • AccessLog 类用于记录用户的操作日志。
  • 继承了 TimestampMixin
  • 包含字段如 user_id(用户ID),target_url(访问的URL)和 ip(访问IP),用于记录用户的操作行为和访问信息。

标签:description,角色,访问控制,fields,RBAC,length,max,CharField,True
From: https://www.cnblogs.com/honeyShi/p/17931222.html

相关文章

  • 涅槃重生—奇迹mu四转角色全解析
    一、前言奇迹mu作为一款经典的在线游戏,至今仍受到广泛的喜爱。作为一个老玩家,我非常热爱这款游戏的各种玩法和挑战。而四转,作为游戏中最高级别的职业进阶,更是具有重要意义。因此,本文将为大家详细介绍奇迹mu四转角色的各种玩法和技巧,帮助广大玩家更好地享受游戏。二、四转角色介......
  • 深入理解 Kubernetes RBAC:掌握权限管理的精髓
    引言KubernetesRBAC(Role-BasedAccessControl)是Kubernetes中一项关键的安全功能,它通过细粒度的权限控制机制,确保集群资源仅被授权的用户或服务账号访问。深入理解KubernetesRBAC对于构建安全、可维护的容器编排环境至关重要。本文将探讨RBAC的核心概念、工作原理以及最佳......
  • 测试开发 | AI在人工和服务领域的崭新角色
    随着科技的飞速发展,人工智能(AI)正逐渐成为技术领域的一匹黑马,其在人工和服务领域发挥的作用日益凸显。作为一名技术人员,我们不得不深刻认识到AI在这两个领域中的崭新角色,以及它所带来的深刻变革。1.人工领域中的AI应用1.1智能制造和自动化在工业制造领域,AI技术的引入使得智能制造......
  • 不同角色登录
    index.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>LoginTest</title></head><body><formaction="LoginServlet"method="post&q......
  • 【电子公文系统】权限和角色定义
    管理员(Administrator):全局设置和配置系统管理用户帐户和权限监控系统日志和用户活动执行数据备份和恢复操作更新系统和管理系统升级审批者(Approver):审核和签发文档对文档进行审批或拒绝查看待审批的文档队列提供反馈和修订建议作者(Author):创建和编辑文档保存......
  • openGauss学习笔记-161 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-161openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出所有数据库-无权限角色导出数据161.1无权限角色导出数据gs_dump和gs_dumpall通过-U指定执行导出的用户帐户。如果当前使用的帐户不具备导出所要求的权限时,会无法导出......
  • gitlab之五中角色
    GitLab用户权限管理:GitLab用户在组中有五种权限:Guest、Reporter、Developer、Master、Owner1.Guest:可以创建issue、发表评论、不能读写版本库2.Reporter:可以克隆代码,不能提交,QA、PM可以赋予这个权限3.Developer:可以克隆代码、开发、提交、push、RD可以赋予这个权限......
  • 玩转 K8s 权限控制:RBAC + kubeconfig 搞定 kubectl 权限管理那些事
    目录1.先抛需求2.RBAC配置2.1.K8s里的RBAC机制介绍2.2创建ServiceAccount、Role、RoleBinding和Secret3.配置kubeconfig文件3.1kubeconfig文件介绍3.2具体的kubeconfig配置3.3kubeconfig切换测试4.总结1.先抛需求当一个K8s集群需要被多个租户共享时,就......
  • Unity3D 第一人称角色控制器,第一人称相机,摄像机的关系详解
    Unity3D是一款强大的游戏开发引擎,可以用于创建各种类型的游戏。在游戏中,第一人称角色控制器、第一人称相机和摄像机是密切相关的组件,它们共同协作来实现游戏的第一人称视角。下面将详细解释它们之间的关系,并给出代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游......
  • 访问控制学习总结
    访问控制是信息安全的重要组成部分,它确保了系统资源只能被授权的用户访问。基于角色的访问控制(RBAC)是一种常见的访问控制策略,它将权限与角色关联,然后将角色分配给用户。以下是关于如何实现基于角色的访问控制的详细步骤:1.设计角色:根据系统需求和业务场景,设计一系列角色。例如,在......