参考文章:
RBAC权限系统分析、设计与实现:https://cloud.tencent.com/developer/article/1802329
基于角色的访问控制(RBAC)系统的快速理解
rbac系统的基本理解:
在RBAC系统中,通常涉及角色(Role)、用户(User)和权限(Access)等概念。下面是对每个模型的解释:
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。
- 权限 (Access | Permission):访问权限,如:修改用户信息,是否VIP。。。
- 角色 (Role):不同的角色有不同的权限。
- 用户 (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
(角色描述)。- 定义了与
User
和Access
的多对多关系,表示用户可以拥有多个角色,角色可以有多个权限。注意:
from tortoise.models import Model
这里是导入models
的Model
继续实现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"
标签:description,角色,访问控制,fields,RBAC,length,max,CharField,True From: https://www.cnblogs.com/honeyShi/p/17931222.html具体理解:
1. Access
Access
类代表了系统中的权限。- 继承了
TimestampMixin
。- 包含字段如
access_name
(权限名称)和scopes
(权限范围标识),用于定义权限的具体内容。role
字段定义了与Role
的多对多关系。2. AccessLog
AccessLog
类用于记录用户的操作日志。- 继承了
TimestampMixin
。- 包含字段如
user_id
(用户ID),target_url
(访问的URL)和ip
(访问IP),用于记录用户的操作行为和访问信息。