Django權限系統AUTH模塊


    auth模塊是Django提供的標准權限管理系統,可以提供用戶認證用戶組權限管理。auth可以和django admin模塊配合使用、快速建立網站的管理系統。只需要在django的配置文件中INSTALLED_APPS中注冊‘django.contrib.auth’APP即可。

一、auth模塊相關的表

  • user表,User是auth模塊中維護用戶信息的表,在數據庫中該表被命名為auth_user. 該表繼承自Abstractuser.

  • group表,定義用戶組模型,該表只包含一個name字段和一個permissions(權限)多對多關系字段,在數據庫中被命名為auth_group.

  • Permission,  權限表,提供表級別的權限控制,可以檢查用戶是否對某個表擁有增(add),改(change),刪(delete)權限。

來看看三張表的關系:,,
    從數據庫生成的表來看,這三張表實現了兩兩多對多的關聯,其中用戶和組生成的第三張表是auth_user_groups,group和permission生成的第三張表是auth_group_permissions,用戶和權限生成的第三張表是auth_user_user_permissions,如下圖:

 

 

二、User

    在auth中user繼承自AbstractUser,其中AbstractUser又繼承自AbstractBaseUser和PermissionsMixin,其中AbstractBaseUser只保存了密碼和登陸時間,PermissionsMixin提供了權限先關的字段,比如:is_superuser和和組合權限表之間的關聯。

 

先來看下AbstractBaseUser這個表提供兩個字段,和多個基本方法:

1、字段也叫屬性

 - password: 密碼字段

 - last_login:   最后登陸時間

屬性方法:

   is_anonymous: 是否為匿名用戶,永遠返回False。  2.0版本之后會被廢棄。

   is_authenticated: 是否被認證,永遠返回True,。  2.0版本之后會被廢棄。

2、方法

   get_username:  獲取用戶名,為username字段。  Return the identifying username for this User。

   set_password: 設置密碼。

   check_password: 檢查密碼是否正確。

   get_full_name: 獲取全名,通常為first_name+last_name.  需要在子類里重寫這個方法。

   get_short_name: 獲取短名字,需要在子類里重寫這個方法。

   其中還有一些重寫了數據驗證的方法,比如clean等。

 

來看下PermissionsMixin這個類提供的字段和方法,官方解釋如下:

"""
A mixin class that adds the fields and methods necessary to support
Django's Group and Permission model using the ModelBackend.
"""

最小權限管理的基類。

屬性:

 - is_superuser : 是否為管理員。

 - groups: 與組多對多關聯的字段。

 - user_permissions: 與權限關聯的多對多字段,也就是是說明了為什么第三張表表為auth_user_user_permissions. 表名(user)+字段名(user_permissions)

方法:

  get_group_permissions: 獲取這個用戶所在組中所具有的的全部權限。

  has_perm: 判斷一個用戶是否具有摸個權限。  常用。

  has_perms: 判斷用戶對一個權限列表是否具有權限。

  has_module_perms: 判斷對app是否有權限。 

 項目中引用: 

1 from django.contrib.auth.models import User,AbstractUser

 

三、Group

   組提供的功能比較少,只包含一個name屬性和natural_key(返回一個元組)方法。

 

 項目中引用:

from django.contrib.auth.models import Group

將用戶添加到組中:

group.user_set.add(user)  #user為一個User對象,此處為表於表之間的多對多操作

 

 四、Permission

  權限系統提供一種方式去分配權限為用戶或組, 默認是為Django Admin使用的,當然也可以被我們自己使用,Permission只提供表級別的‘add’\'change'\'delete’權限,而且在每張邊表創建后,對應的權限會自動創建。

  

 屬性:

  name:   權限描述別名

  code_name: 權限描述,加上app名稱后可以作為has_perm()參數

  content_type:  django用來保持app和app下表之間關系的一個表。 在django中叫做:ContentType表。

 

判斷是否有權限: 

In [13]: user.has_perm('app.delete_requestreusult')   #前面為APP名稱,后面為權限名

從源碼中可以看出,如果是已登錄的管理員在調用has_perm進行權限驗證時,默認會有最高權限。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM