如何在Django身份驗證系統中新增組?
Django配備了內建的許可權系統,該系統將許可權分配給特定使用者或使用者組。Django-admin站點使用的許可權如下:
具有該型別物件“檢視”或“更新”許可權的使用者可以訪問檢視物件。
只有具有該型別專案“新增”許可權的使用者才能訪問“新增”表單並新增物件。
具有該型別專案“更改”許可權的使用者可以訪問更改列表、“更改”表單以及更改物件的功能。
只有具有該物件型別“刪除”許可權的使用者才能刪除它。
可以為不同型別的物件以及特定物件例項設定許可權。這可以透過使用has_add_permission()、has_view_permission()、has_change_permission()和has_delete_permission()方法來完成。
這些方法在ModelAdmin類中提供,使用這些方法可以自定義不同物件的許可權。
#set user’s groups: Myuser.groups =group_list #to add or remove a user from a group the following commands can be used. Myuser.groups.add(grp1,grp2) Myuser.groups.remove(grp1,grp2) #To add, remove and clear all permissions the following commands can be used. Myuser.permissions=permission_list Myuser.permissions.add(p1,p2,p3) Myuser.permissions.remove(p1) Myuser.permissions.clear()
所有上述命令通常都寫在views.py檔案中。在這個檔案中,接收使用者輸入的資訊,並對其進行身份驗證和授權。
因此,上述程式碼應該理想地在專案中的views.py檔案中編寫。
預設許可權使用django.contrib.auth提供,該許可權列在settings.py檔案中的INSTALLED_APPS中。這將預設確保為專案中的所有模型提供新增、檢視、更新和刪除許可權。
例如,您正在執行一個電子商務網站,您的網站的使用者包括客戶和員工,一個名為review的應用程式和一個名為product的模型。要檢查使用者是否具有與該模型相關的許可權,可以使用以下程式碼行。
User.has_perm(‘review.add_product’) User.has_perm(‘review.remove_product’) User.has_perm(‘review.delete_product’) User.has_perm(‘review.view_product’)
要檢查使用者是否具有特定許可權,而不是單獨檢查所有許可權,還可以使用以下方法:
From django.contrib.auth.decorators import permission_required @permission_required(‘review.add_product’) Def fun(request): ‘’’can raise error stating that permission is denied.’’’
或者
{% if perms.review.add_product %}
以上程式碼行也可以用來檢查使用者是否具有許可權。
自定義許可權
如果Django提供的4種許可權無法滿足您的網站需求,您可以建立自定義許可權。例如,查詢產品許可權。客戶和員工都可以具有搜尋產品的許可權。
要設計自定義許可權,您可以將其新增到產品模型許可權中。
From django.db import models Class Product(models.Model); User=models.ForeignKey(User) Class Meta: Permissions=( (“search_product”,”search for vote”), )
Django中的組
Django組是許可權列表。一個組包含多個使用者。一個使用者可以是多個組的一部分,一個組可以有多個使用者。
使用組的主要優點是,組中的使用者會自動擁有賦予該組的所有許可權。可以建立多個組來限制許可權。
要在Django中建立組,可以執行以下操作。
From django.contrib.auth.models import Group Employee_group,created=Group.objects.get_or_create(name=’employee’) To assign a set of permissions to a particular group Employee_group.permissions.set([list of permissions]) Employee_group.permissions.remove([list of permissions]) Employee_group.permissions.add([list of permissions]) Employee_group.permissions.clear()