[Django REST framework - RBAC-基於角色的訪問控制、base64編碼 、xadmin的使用]

劉較瘦丫發表於2021-07-10

[Django REST framework - RBAC-基於角色的訪問控制、base64編碼 、xadmin的使用]

RBAC-基於角色的訪問控制

RBAC 是基於角色的訪問控制(Role-Based Access Control )

在 RBAC 中,許可權與角色相關聯,使用者通過成為適當角色的成員而得到這些角色的許可權。這就極大地簡化了許可權的管理。這樣管理都是層級相互依賴的,許可權賦予給角色,而把角色又賦予使用者,這樣的許可權設計很清楚,管理起來很方便。

應用

RBAC - Role-Based Access Control
Django的 Auth元件 採用的認證規則就是RBAC
  • 1)像專門做人員許可權管理的系統(CRM系統)都是公司內部使用,所以資料量都在10w一下,一般效率要求也不是很高
  • 2)使用者量極大的常規專案,會分兩種使用者:前臺使用者(三大認證) 和 後臺使用者(BRAC來管理)

結論:沒有特殊要求的Django專案可以直接採用Auth元件的許可權六表,不需要自定義六個表,也不需要斷開表關係,單可能需要自定義User表

前後臺許可權控制

  • 1)後臺使用者對各表操作,是後臺專案完成的,我們可以直接藉助admin後臺專案(Django自帶的)
  • 2)後期也可以用xadmin框架來做後臺使用者許可權管理
  • 3)前臺使用者的許可權管理如何處理<
    •   定義了一堆資料介面的檢視類,不同的登入使用者是否能訪問這些檢視類,能就代表有許可權,不能就代表無許可權
    •   前臺使用者許可權用drf框架的 三大認證

Django的內建RBAC(六表)

1 許可權3個表
   - 使用者表:auth_user
   - 角色表:auth_group
   - 許可權表:auth_permission
    
2 許可權6個表(正常是5個表),django的auth,用的就是6表
    - 使用者表:auth_user
    - 角色表:auth_group
    - 許可權表:auth_permission
    - 角色和許可權是多對多:auth_group_permissions (G_P關係表)
    - 使用者和角色是多對多:auth_user_groups (U_G關係表)
   
    - 使用者和許可權的多對多表:auth_user_user_permissions (U_P關係表)

許可權六表:RBAC - Role-Based Access Control

三表

許可權六表

總結

# 1)後臺使用者對各表操作,是後臺專案完成的,我們可以直接藉助admin後臺專案(Django自帶的)
# 2)後期也可以用xadmin框架來做後臺使用者許可權管理

# 3)前臺使用者的許可權管理如何處理
#   定義了一堆資料介面的檢視類,不同的登入使用者是否能訪問這些檢視類,能就代表有許可權,不能就代表無許可權
#   前臺使用者許可權用drf框架的 三大認證

# 注:前臺使用者許可權會基於 jwt 認證

做專案是否要分表管理前後臺使用者

"""
1)是否需要分表
答案:不需要
理由:前後臺使用者共存的專案,後臺使用者量都是很少;做人員管理的專案,基本上都是後臺使用者;前後臺使用者量都大的會分兩個專案處理

2)使用者許可權六表是否需要斷關聯
答案:不需要
理由:前臺使用者佔主導的專案,幾乎需求只會和User一個表有關;後臺使用者佔主導的專案,使用者量不會太大

3)Django專案有沒有必須自定義RBAC六表
答案:不需要
理由:auth元件功能十分強大且健全(驗證密碼,建立使用者等各種功能);admin、xadmin、jwt、drf-jwt元件都是依賴auth元件的(自定義RBAC六表,外掛都需要自定義,成本極高)
"""

base64編碼

# base64編碼 
### 編碼
import base64
import json

dic={'name':'lqz','id':1}
user_info_str=json.dumps(dic)   # 序列化為str型別

# res=base64.b64encode(bytes(user_info_str,encoding='utf-8'))
 				↑ ↓  相等
res=base64.b64encode(user_info_str.encode('utf-8'))
print(res) # eyJuYW1lIjogImxxeiIsICJpZCI6IDF9


###  解碼
res=base64.b64decode('TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ='.encode('utf-8'))
print(res)


### 注意:base64長度是4的倍數,如果不足,需要用 = 補齊

xadmin的使用

1 django後臺管理admin
2 xadmin,美化頁面,bootstrap+jq,
    -django:1.x,2.x
    -3.x以後就不用了
    
3 simple-ui
    3.x用    
    
4 django是1.x 
    pip3 install xadmin
    
5 django是2.x
    pip install git+git://github.com/sshwsfc/xadmin.git@django2
    
6 碰到一個第三方外掛,有些bug
    -pip3 install 名字:裝到直譯器中---》下次換了別的直譯器,改了原始碼,又得重新改
    -把第三方外掛的原始碼拿出來
    -放到自己專案裡,想怎麼改,就怎麼改
    
    
7 Xadmin和django的xadmin壓根沒有聯絡
    -http://x.xuebingsi.com/
    -純前端(html,css,js)後臺模板
    -跟語言無關
    -xadmin和layui的區別
        基於layui寫的後臺管理模板
        
8 基於bootstrap的後臺管理模板
    -admin lte
    
9 前後端分離
    -後臺模板
    -vue-admin

相關文章