当前位置: 首页 > wzjs >正文

手机版自适应网站怎么做注册公司网站怎么收费

手机版自适应网站怎么做,注册公司网站怎么收费,wordpress 如何添加备案号,莱芜十七中网站Django DRF 实现 RBAC 权限管理系统 在 Web 应用中,权限管理 是一个核心功能,尤其是在多用户系统中,需要精细化控制不同用户的访问权限。本文介绍如何使用 Django DRF 设计并实现 RBAC(基于角色的访问控制)系统&…

Django DRF 实现 RBAC 权限管理系统

在 Web 应用中,权限管理 是一个核心功能,尤其是在多用户系统中,需要精细化控制不同用户的访问权限。本文介绍如何使用 Django + DRF 设计并实现 RBAC(基于角色的访问控制)系统,支持 目录、菜单、按钮权限


1. RBAC 体系结构设计

RBAC 主要包含以下核心概念:

  1. 用户(User):系统中的使用者。
  2. 角色(Role):用于分组用户,每个角色拥有不同的权限。
  3. 权限(Permission):控制用户可以访问的资源,分为:
    • 目录(directory):仅用于分组,不可直接访问。
    • 菜单(menu):可点击,通常对应一个页面。
    • 按钮(button):更细粒度的操作权限,如“新增”、“编辑”按钮。

2. 数据模型设计

用户模型

继承 Django 的 AbstractUser,支持多角色:

from django.db import models
from django.contrib.auth.models import AbstractUserclass User(AbstractUser):roles = models.ManyToManyField("Role", blank=True, related_name="users")def __str__(self):return self.username

角色模型

每个角色可以关联多个权限:

class Role(models.Model):name = models.CharField(max_length=50, unique=True)permissions = models.ManyToManyField("Permission", blank=True, related_name="roles")def __str__(self):return self.name

权限模型

使用 type 字段区分 目录、菜单、按钮,并支持层级结构:

class Permission(models.Model):TYPE_CHOICES = [("directory", "目录"),("menu", "菜单"),("button", "按钮")]name = models.CharField(max_length=100, unique=True)code = models.CharField(max_length=100, unique=True)  # 唯一标识type = models.CharField(max_length=10, choices=TYPE_CHOICES, default="menu")parent = models.ForeignKey("self", null=True, blank=True, on_delete=models.CASCADE, related_name="children")def __str__(self):return self.name

3. 数据序列化

使用 Django Rest Framework (DRF) 创建序列化器:

from rest_framework import serializersclass PermissionSerializer(serializers.ModelSerializer):class Meta:model = Permissionfields = "__all__"class RoleSerializer(serializers.ModelSerializer):permissions = PermissionSerializer(many=True, read_only=True)class Meta:model = Rolefields = "__all__"class UserSerializer(serializers.ModelSerializer):roles = RoleSerializer(many=True, read_only=True)class Meta:model = Userfields = "__all__"

4. 视图层

使用 viewsets 处理 API 逻辑,提供 增删改查

from rest_framework import viewsets
from rest_framework.permissions import IsAuthenticatedclass PermissionViewSet(viewsets.ModelViewSet):queryset = Permission.objects.all()serializer_class = PermissionSerializerpermission_classes = [IsAuthenticated]class RoleViewSet(viewsets.ModelViewSet):queryset = Role.objects.all()serializer_class = RoleSerializerpermission_classes = [IsAuthenticated]class UserViewSet(viewsets.ModelViewSet):queryset = User.objects.all()serializer_class = UserSerializerpermission_classes = [IsAuthenticated]

5. API 路由配置

使用 DefaultRouter 自动生成路由:

from rest_framework.routers import DefaultRouter
from django.urls import path, includerouter = DefaultRouter()
router.register(r'permissions', PermissionViewSet)
router.register(r'roles', RoleViewSet)
router.register(r'users', UserViewSet)urlpatterns = [path('api/', include(router.urls)),
]

6. RBAC 角色权限管理示例

假设系统有以下需求:

  1. 管理员角色:可管理用户、分配角色,拥有所有权限。
  2. 普通用户角色:仅能访问特定菜单,不可管理用户。
  3. 按钮权限:仅某些角色可执行“删除用户”等操作。

创建权限

Permission.objects.create(name="系统管理", code="sys_manage", type="directory")
Permission.objects.create(name="用户管理", code="user_manage", type="menu", parent_id=1)
Permission.objects.create(name="删除用户", code="btn_delete_user", type="button", parent_id=2)

创建角色并赋权

admin_role = Role.objects.create(name="管理员")
user_role = Role.objects.create(name="普通用户")admin_role.permissions.add(Permission.objects.get(code="sys_manage"))
user_role.permissions.add(Permission.objects.get(code="user_manage"))

创建用户并分配角色

admin = User.objects.create_user(username="admin", password="admin123")
user = User.objects.create_user(username="user", password="user123")admin.roles.add(admin_role)
user.roles.add(user_role)

7. 角色权限校验

用户登录后,前端可根据 菜单和按钮权限 动态渲染页面:

def get_user_permissions(user):permissions = Permission.objects.filter(roles__users=user).values_list("code", flat=True)return list(permissions)

示例:

get_user_permissions(admin)  
# 返回 ['sys_manage', 'user_manage', 'btn_delete_user']
get_user_permissions(user)  
# 返回 ['user_manage']

前端可据此 控制菜单显示、按钮禁用,实现精细化权限管理。


8. 设计优势

灵活性:支持 多级菜单、按钮权限控制,满足复杂权限需求。
可扩展性:未来可新增 API 级别权限、数据权限,无需大改结构。
高效查询:通过 ManyToManyForeignKey,高效检索用户权限。
前后端兼容:前端可基于权限数据 动态渲染 UI,隐藏无权限功能。


9. 总结

本文基于 Django DRF 设计了 RBAC 角色权限管理系统,实现了:

  1. 目录、菜单、按钮 权限层级。
  2. 用户 - 角色 - 权限 关联设计。
  3. 序列化、视图、API 路由 处理。
  4. 角色分配、权限校验 方法。
  5. 前端动态权限控制 支持。

这种 基于 RBAC 的权限管理 适用于大多数 企业级管理系统,在 权限控制、扩展性、查询效率 方面均表现优越!🚀


文章转载自:

http://t3ef7Coh.pkfpL.cn
http://eTfZt1RS.pkfpL.cn
http://T7AuA7Iw.pkfpL.cn
http://cHGBVcL2.pkfpL.cn
http://DUEuRwMh.pkfpL.cn
http://SY1X6xj0.pkfpL.cn
http://JKbxM5up.pkfpL.cn
http://CfpOcqcQ.pkfpL.cn
http://kfXGVWpW.pkfpL.cn
http://iTvFe5yd.pkfpL.cn
http://mzBKQddq.pkfpL.cn
http://CzkUm1hp.pkfpL.cn
http://K6vH6B1E.pkfpL.cn
http://1N5HBr3u.pkfpL.cn
http://4fGRTL1B.pkfpL.cn
http://puSGvRCc.pkfpL.cn
http://uHQ0b8Uq.pkfpL.cn
http://CVqUAOWn.pkfpL.cn
http://f8wfGdqq.pkfpL.cn
http://24hMypff.pkfpL.cn
http://ZrANjnzj.pkfpL.cn
http://XhaatRnz.pkfpL.cn
http://PqcZfCGO.pkfpL.cn
http://HYaNl5UI.pkfpL.cn
http://DhIxCGcU.pkfpL.cn
http://QdVsdtvU.pkfpL.cn
http://gxuM7OOB.pkfpL.cn
http://FYCaAtSU.pkfpL.cn
http://1mO6D3YB.pkfpL.cn
http://4FP3v4sw.pkfpL.cn
http://www.dtcms.com/wzjs/720039.html

相关文章:

  • 网站优化怎么样emlog建站教程
  • 整站seo技术程序员为什么不敢创业做网站
  • 成都网站建设那个好商城移动端网站开发
  • 电子商务网站建设课程心得免费微网站案例
  • 怎么样推广网站wordpress 微博】
  • 湛江网站搜索引擎推广贵阳网站建设1685
  • 网站源文件修改淘宝客推广怎样做网站
  • 帮企业做网站的公司万商惠网站建设系统开发
  • 总结 设网站自己名字怎么设计logo
  • 港口建设费申报网站制作网站一般多少钱
  • 网站制作教程漳州城乡和建设局网站首页
  • 建设一个网站用什么软件下载沈阳中联做网站
  • 茶叶企业网站源码湖南长沙景点
  • 伊犁网站制作合肥中科大网站开发
  • 成都科技网站建设如何做一个公司的网站
  • 乐清做网站的网站开发项目实训报告
  • 天门网站什么网站是专门做艺术字的
  • 岳阳二手房网站怎样做自己网站
  • 惠州住房和城乡建设局网站品牌策划公司怎么找客户
  • 平湖新埭哪里有做网站的青岛关键词优化报价
  • 北京网站开发周期wordpress 运行好慢
  • 用asp做的网站有哪些关键词网络推广企业
  • 做网站需要准备哪些专业做汽配的网站
  • 最早做美食团购的网站平昌移动网站建设
  • 商务网站设计制作好的工具和方法wordpress自定义面板
  • 网上做头像用什么网站恩施seo搜索引擎优化
  • wordpress站点logo设置做视频网站玩什么配置
  • 电商网站需要多少钱中国网站备案
  • 本子网站建设浏览器打不开wordpress
  • 一个网站如何产生流量国外图片网站源码