1. 自定義用模型
- ① 在settings中添加聲明
# 聲明自定義模型為MyUser
AUTH_USER_MODEL = 'app.MyUser'
- ② 在models中繼承
AbstractUser類(lèi), 自定義用戶(hù)模型
class MyUser(AbstractUser):
"""
自定義django自帶的模型
"""
is_delete = models.BooleanField(default=0, verbose_name='是否刪除')
class Meta:
permissions = (
# (權(quán)限名, 描述)
('change_myuser_username', '修改用戶(hù)名'),
('change_myuser_password', '修改密碼'),
)
- ③ 在views中構(gòu)造方法
add_user_permission(request)給指定用戶(hù)添加指定權(quán)限
def add_user_permission(request):
if request.method == 'GET':
# 給admin用戶(hù)添加修改用戶(hù)名的權(quán)限
user = MyUser.objects.filter(username='admin').first()
per = Permission.objects.filter(codename='change_myuser_username').first()
# 添加權(quán)限
user.user_permissions.add(per)
# 刪除權(quán)限
# user.user_permissions.add(per)
# 清空權(quán)限
# user.user_permissions.clear()
return HttpResponse('添加用戶(hù)權(quán)限成功')
- ④ 在views中構(gòu)造方法
add_group_permission(request)給指定組添加指定權(quán)限
def add_group_permission(request):
if request.method == 'GET':
# 創(chuàng)建審核組, 并分配查看, 和編輯
group = Group.objects.filter(name='審核組').first()
if group:
per_list = [
'change_myuser_username',
'change_myuser_password',
'change_myuser',
'delete_myuser'
]
pers = Permission.objects.filter(codename__in=per_list)
for per in pers:
# 添加組和權(quán)限之間的關(guān)系
group.permissions.add(per)
# 添加組和權(quán)限之間的關(guān)系
# group.permissions.remove(per)
return HttpResponse(0)
else:
Group.objects.create(name='審核組')
return HttpResponse('審核組不存在, 請(qǐng)先創(chuàng)建')
- ⑤ 在views中構(gòu)造方法
add_user_group(request)給指定用戶(hù)分配組
def add_user_group(request):
if request.method == 'GET':
user = MyUser.objects.filter(username='admin').first()
group = Group.objects.filter(name='審核組').first()
# 給admin用戶(hù)分配組
user.groups.add(group)
return HttpResponse('分配成功')
- ⑥ 在views中構(gòu)造方法
user_permission(request)查看指定用戶(hù)的所有權(quán)限
def user_permission(request):
if request.method == 'GET':
user = MyUser.objects.filter(username='admin').first()
# 1. 直接從用戶(hù)和權(quán)限關(guān)聯(lián)表查
p1 = user.user_permissions.all().values('codename')
# 2. 從組和權(quán)限關(guān)聯(lián)表查詢(xún)
p2 = user.groups.first().permissions.all().values('codename')
# 獲取user的所有權(quán)限
user.get_all_permissions()
# 獲取user所在組的權(quán)限
user.get_group_permissions()
return HttpResponse(p1)
- ⑦ 在views中構(gòu)造被
permission_required('app.changge_myuser_username')修改用戶(hù)名權(quán)限修飾器修飾的方法, 該方法需要有changge_myuser_username權(quán)限的用戶(hù)才能訪問(wèn)
@permission_required('app.change_myuser_username')
def index(request):
if request.method == 'GET':
return render(request, 'index.html')
tips:在settings中添加LOGIN_URL= 驗(yàn)證失敗URL,會(huì)在驗(yàn)證失敗時(shí)跳轉(zhuǎn)驗(yàn)證失敗頁(yè)面