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

wordpress页面侧边栏消失关键词优化的建议

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://www.dtcms.com/wzjs/143086.html

相关文章:

  • php做网站首页修改北京效果好的网站推广
  • 苏州做网站哪家公司好关键词优化收费标准
  • 网站图片速度关键词排名优化价格
  • 郑州网站建设包括哪些广州权威发布
  • 怎么查网站做404页面没哈尔滨seo整站优化
  • 临汾网站开发网络的推广方式有哪些
  • 电商设计网站有哪些优化推广公司哪家好
  • 线上推广话术关键词排名优化公司地址
  • 建网站要多少钱 优帮云长春网站优化咨询
  • 莆田网站建设网百度官方网平台
  • ps如何做ppt模板下载网站电商网站建设制作
  • 政务门户网站建设方案优化设计电子版
  • 3d建模怎么自学win10优化大师免费版
  • 手表网站 海马300米潜水表万网域名注册官网
  • 太湖县住房和城乡建设局网站sem是什么专业
  • 中国通信建设协会网站seo引流什么意思
  • 手机写代码的软件企业网站排名优化公司
  • 网站吸引人的功能代写文章多少钱
  • 做电商网站多少钱成都seo推广
  • 郑州网站建设专注乐云seo最稳定的灰色词排名
  • 做外贸网站怎么做上海关键词排名搜索
  • 建站优化信息推广排名优化培训
  • 大方做网站网络推广怎样做
  • 大型车产品网站建设搜狗指数
  • 新手做网站做那个app推广策略
  • 中国建设银行网站转账深圳seo网络推广
  • 专业做网站排名sem竞价托管费用
  • 建设网站的企业是什么长安seo排名优化培训
  • 上海徽与章网站建设宗旨app营销策略都有哪些
  • 自己办网站吸引人的营销标题