如何在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()

更新於:2022年9月5日

3K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告