權限:數據庫
對錶或者模型級別設置權限。不能針對數據級別進行操做。django
django.contrib.auth.Permission 模型包含三個字段:app
建立的模型默認就有三種:增、刪、改;可在數據庫中的 auth_permission 表中查看全部權限。ui
添加權限的方法:url
1 class Article(models.Model): 2 title = models.CharField(max_length=100) 3 content = models.TextField() 4 author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE) 5 # 定義模型添加權限 6 class Meta: 7 permissions = [ 8 ('刪除','刪除文章的權限') 9 ]
1 from django.contrib.auth.models import Permission,ContentType 2 from .models import Article 3 4 # 使用代碼建立權限 5 def add_permission(request): 6 content_type = ContentType.objects.get_for_model(Article) 7 permission = Permission.objects.create(codename='black_article',name='拉黑文章',content_type=content_type) 8 return HttpResponse('權限建立成功!')
用戶與權限管理:spa
1 # 用戶的權限管理; 2 def operate_permission(request): 3 user = User.objects.first() 4 print(user) 5 content_type = ContentType.objects.get_for_model(Article) 6 permissions = Permission.objects.filter(content_type=content_type) 7 # 添加多個或一個 8 user.user_permissions.set(permissions) 9 # user.user_permissions.add(permissions[0],permissions[1]) 10 # 刪除 11 # user.user_permissions.clear() 12 if user.has_perm('front.view_article'): 13 print('該用戶擁有view權限') 14 else: 15 print('沒有該權限') 16 # 查看擁有的全部權限 17 print(user.get_all_permissions()) 18 return HttpResponse('添加權限操做成功!')
權限限定裝飾器:code
1 from django.contrib.auth.decorators import permission_required 2 3 # 使用裝飾器驗證權限,raise_exception=True時,沒權限會跳轉到403頁面; 4 @permission_required('front.add_article',login_url='/login/',raise_exception=True) 5 def add_article(request): 6 return HttpResponse('這是添加文章的頁面') 7 8 # 使用裝飾器可省略的代碼 9 # 判斷用戶有沒有登陸 10 # if request.user.is_authenticated: 11 # print('已經登陸') 12 # print(request.user.get_all_permissions()) 13 # if request.user.has_perm('front.add_article'): 14 # return HttpResponse('這是添加文章的頁面') 15 # else: 16 # return HttpResponse('沒有訪問該頁面的權限!',status=403) 17 # else: 18 # print('沒有登陸') 19 # return redirect(reverse('login'))
分組:blog
將權限歸類,添加到某個分組,把須要相同權限的用戶添加到同一分組中。在數據庫的 auth_group 表中,擁有id和name兩個字段。rem
分組操做:字符串
1 from django.contrib.auth.models import Group 2 3 def operate_group(request): 4 # 建立分組 5 # group = Group.objects.create(name='財務') 6 # content_type = ContentType.objects.get_for_model(Article) 7 # permissions = Permission.objects.filter(content_type=content_type) 8 # group.permissions.set(permissions) 9 # group.save() 10 # 將用戶添加到分組中 11 # group = Group.objects.filter(name='財務').first() 12 # user = User.objects.filter(pk=5).first() 13 # user.groups.add(group) 14 # user.save() 15 # 判斷用戶是否有權限 16 user = User.objects.filter(pk=5).first() 17 if user.has_perm('front.add_article'): 18 print('有添加文章的權限') 19 else: 20 print('沒有添加文章的權限') 21 return HttpResponse('操做分組')
模板中使用權限:
在模板中使用 perms 獲取用戶的全部權限,單登陸的用戶擁有 add_article 的權限時,才顯示 添加文章 的字樣。
1 <!--index--> 2 <body> 3 首頁 4 {% if perms.front.add_article %} 5 <a href="">添加文章</a> 6 {% endif %} 7 </body>