【后端】【django】Django 自带的用户体系与 RBAC 机制

张裕  金牌会员 | 2025-3-15 22:58:15 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 671|帖子 671|积分 2013

Django 自带的用户体系与 RBAC 机制

Django 自带的用户体系(django.contrib.auth)提供了 身份验证(Authentication)权限管理(Authorization),可以或许快速实现 用户管理、权限控制、管理员后台 等功能,同时具备 RBAC(基于角色的访问控制,Role-Based Access Control) 的基本实现。本文将详细介绍 Django 用户体系的功能、管理员账号创建、RBAC 机制及其扩展方案。

一、Django 自带用户体系的作用

Django 自带的用户体系主要用于 用户身份管理、身份验证、权限与授权、用户管理后台 以及 扩展性,使开发者可以或许快速实现用户相干功能,而无需从零编写。
(一)用户身份管理

Django 提供了默认的 User 模型,其中包罗:


  • 基本字段:username、password、email 等
  • 权限字段:is_active(是否激活)、is_staff(是否是后台管理员)、is_superuser(是否是超级用户)
  • 用户创建

    • User.objects.create_user():创建普通用户
    • User.objects.create_superuser():创建超级管理员

(二)身份验证(Authentication)



  • 密码存储:Django 采用 PBKDF2、Argon2、BCrypt 等安全算法存储密码
  • 登录与退出

    • authenticate():验证用户名和密码
    • login():纪录用户 session
    • logout():扫除用户 session,注销登录

  • 自动处置惩罚用户 session:可通过 request.user 直接获取当前登录用户
(三)权限与授权(Permissions & Authorization)

Django 的权限管理体系包罗 用户权限、组权限、对象权限


  • 用户权限:通过 is_staff 和 is_superuser 控制
  • 组权限:利用 Group 模型批量管理权限
  • 对象权限:支持模型级权限(add_xxx、change_xxx、delete_xxx)
  • 权限检查

    • @login_required 限制访问
    • @permission_required("app_label.permission_name") 控制权限
    • request.user.has_perm("app_label.permission_name") 检查权限

(四)用户管理后台

Django 自带 admin 后台(django.contrib.admin),可快速管理 用户、权限、组,无需额外开发界面。
(五)扩展性



  • 自界说用户模型:通过 AbstractUser 或 AbstractBaseUser 进行扩展
  • 扩展用户字段:如手机号、头像等
  • 第三方认证:可集成 OAuth(Google、GitHub 登录)或 JWT(DRF Simple JWT)

二、管理员账号的创建与管理

(一)如何创建管理员账号?

Django 不会自动创建管理员账号,需要手动执行以下命令:
  1. python manage.py createsuperuser
复制代码
随后输入 用户名、邮箱、密码 创建管理员账户。
(二)如何利用管理员账号登录?


  • 访问 Django Admin 后台
    1. http://127.0.0.1:8000/admin/
    复制代码
  • 利用 createsuperuser 创建的账号登录。
(三)如何检察或修改管理员账号?



  • 在数据库中查找超级管理员
    1. SELECT username, email FROM auth_user WHERE is_superuser=1;
    复制代码
  • 修改管理员密码
    1. python manage.py changepassword admin
    复制代码

三、Django 的 RBAC(基于角色的访问控制)机制

Django 自带 RBAC 的基础实现,主要通过 用户(User)、权限(Permission)、组(Group) 进行管理。
(一)用户(User)



  • 每个用户可以 独立拥有权限归属于某个组(Group),继续组权限。
(二)权限(Permission)

Django 提供了 基于模型的权限,默认包括:


  • add_modelname(添加权限)
  • change_modelname(修改权限)
  • delete_modelname(删除权限)
  • view_modelname(检察权限)
权限检查


  • 代码中检查权限
    1. if request.user.has_perm('app_label.permission_name'):
    2.     # 用户有权限
    复制代码
  • 利用装饰器
    1. from django.contrib.auth.decorators import permission_required
    2. @permission_required('app_label.permission_name', raise_exception=True)
    3. def my_view(request):
    4.     pass
    复制代码
(三)组(Group)

Group 答应批量管理权限,方便将权限分配给多个用户。例如:
  1. from django.contrib.auth.models import Group, Permission
  2. # 创建一个 "编辑" 组
  3. editor_group = Group.objects.create(name='Editor')
  4. # 获取某个权限
  5. permission = Permission.objects.get(codename='change_article')
  6. # 给 "编辑" 组添加权限
  7. editor_group.permissions.add(permission)
  8. # 将用户加入 "编辑" 组
  9. user.groups.add(editor_group)
复制代码

四、Django RBAC 机制的范围性及扩展

Django 默认的 RBAC 较为基础,存在以下范围:


  • 权限是基于模型的,无法控制对象级权限(如用户只能编辑本身创建的文章)
  • 没有层级角色,管理员无法管理某个组
  • 没有前端 UI,只能通过 Django Admin 或代码管理
(一)扩展 Django RBAC

1. 自界说权限体系



  • 继续 AbstractUser 或 AbstractBaseUser 自界说用户模型
  • 筹划 UserRole 表,实现 用户 → 角色 → 权限 关系
2. 利用 django-guardian 实现对象级权限



  • django-guardian 答应用户对特定对象(如某篇文章)赋权:
    1. from guardian.shortcuts import assign_perm
    2. assign_perm('change_article', user, article)  # 允许 user 修改特定文章
    复制代码
3. 利用 django-rules 规则引擎



  • 通过函数界说权限规则:
    1. import rules
    2. @rules.predicate
    3. def is_author(user, article):
    4.     return article.author == user
    复制代码

五、总结

功能Django 默认 RBAC扩展方案用户管理✅✅组管理✅✅基于模型权限✅✅对象级权限❌django-guardian细粒度角色管理❌自界说模型动态权限规则❌django-rules Django 自带用户体系 提供了 用户管理、身份验证、权限控制,并包罗 基础 RBAC 机制,但假如需要 更复杂的权限管理(如对象级权限、动态规则),建议利用 django-guardian、django-rules 或自界说 RBAC 方案

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张裕

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表