IT评测·应用市场-qidao123.com
标题:
【后端】【django】Django 自带的用户体系与 RBAC 机制
[打印本页]
作者:
张裕
时间:
2025-3-15 22:58
标题:
【后端】【django】Django 自带的用户体系与 RBAC 机制
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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4