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 不会自动创建管理员账号,需要手动执行以下命令:
- python manage.py createsuperuser
复制代码 随后输入 用户名、邮箱、密码 创建管理员账户。
(二)如何利用管理员账号登录?
- 访问 Django Admin 后台:
- http://127.0.0.1:8000/admin/
复制代码 - 利用 createsuperuser 创建的账号登录。
(三)如何检察或修改管理员账号?
- 在数据库中查找超级管理员:
- SELECT username, email FROM auth_user WHERE is_superuser=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(检察权限)
权限检查
- 代码中检查权限:
- if request.user.has_perm('app_label.permission_name'):
- # 用户有权限
复制代码 - 利用装饰器:
- from django.contrib.auth.decorators import permission_required
- @permission_required('app_label.permission_name', raise_exception=True)
- def my_view(request):
- pass
复制代码 (三)组(Group)
Group 答应批量管理权限,方便将权限分配给多个用户。例如:
- from django.contrib.auth.models import Group, Permission
- # 创建一个 "编辑" 组
- editor_group = Group.objects.create(name='Editor')
- # 获取某个权限
- permission = Permission.objects.get(codename='change_article')
- # 给 "编辑" 组添加权限
- editor_group.permissions.add(permission)
- # 将用户加入 "编辑" 组
- user.groups.add(editor_group)
复制代码 四、Django RBAC 机制的范围性及扩展
Django 默认的 RBAC 较为基础,存在以下范围:
- 权限是基于模型的,无法控制对象级权限(如用户只能编辑本身创建的文章)
- 没有层级角色,管理员无法管理某个组
- 没有前端 UI,只能通过 Django Admin 或代码管理
(一)扩展 Django RBAC
1. 自界说权限体系
- 继续 AbstractUser 或 AbstractBaseUser 自界说用户模型
- 筹划 UserRole 表,实现 用户 → 角色 → 权限 关系
2. 利用 django-guardian 实现对象级权限
- django-guardian 答应用户对特定对象(如某篇文章)赋权:
- from guardian.shortcuts import assign_perm
- assign_perm('change_article', user, article) # 允许 user 修改特定文章
复制代码 3. 利用 django-rules 规则引擎
- 通过函数界说权限规则:
- import rules
- @rules.predicate
- def is_author(user, article):
- return article.author == user
复制代码 五、总结
功能Django 默认 RBAC扩展方案用户管理✅✅组管理✅✅基于模型权限✅✅对象级权限❌django-guardian细粒度角色管理❌自界说模型动态权限规则❌django-rules Django 自带用户体系 提供了 用户管理、身份验证、权限控制,并包罗 基础 RBAC 机制,但假如需要 更复杂的权限管理(如对象级权限、动态规则),建议利用 django-guardian、django-rules 或自界说 RBAC 方案。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |