flask-login ----系統權限設計部分小結


tips:

事實證明。開發是一項苦力活。但是代碼只有自己寫的才是令人感到放心的。不過僅僅是從開發角度來說。從維護和安全角度來說,當然還是引入模塊比較爽

 

但是引入的模塊總會有一些問題。碰到的最大問題就是,暴露的只有接口,內部實現的時候調用了什么一概不知

百度很渣,python的資料用百度實在是不能查出來什么有用的東西。

 

這周工作基本上是做一個經典的權限管理模型,一個線上平台的應用場景:

公司-合作伙伴-合作伙伴下屬賬戶

站點-權限組-用戶

 

python代碼量不是很多。但是建議使用藍本對於整個web進行功能分離:

合作伙伴主賬戶的管理功能,涵蓋:用戶管理,站點分配,用戶組管理。寫到這里發現一個問題。系統的關鍵參數,比如用戶名,最好是不能進行修改。同時在創建時進行校驗。保證不越權

一般用戶的訪問功能:數據庫性能管理;告警監控管理;個人信息修改(密碼,郵箱等)

最高管理員權限:站點添加;合作伙伴管理

 

系統中權限按照二進制位進行分配。每個功能模塊都設置了相應的權限。但是目前系統不需要更加詳細的權限設置。但是這樣設計是為以后進一步細分留下的空間。

 

說完這個接下來是sqlalchemy的經典model設計

其中User部分需要內置一些函數,用來實現一些驗證。我覺得在這個地方做這些,是為了減少代碼開銷。對於性能來講是差不多的。主要函數就是一些比如密碼哈希加密,哈希解密,返回用戶擁有權限這樣的簡單驗證

 

當引入flask-login模塊的時候,需要注意user表,flask-login默認使用

def load_user(user_id):
return User.query.get(int(user_id))

但是這邊還不是很直觀。因為這邊傳遞的是一個形參。在527行的部分,其實內部實現的實參是取User表的id列。但是一般在多表結構設計的時候,基本上不會把所有的表的主鍵都用簡單的id進行注冊

至少我們是用例如partner_id;user_id這樣的列名作為主鍵的。所以這個部分會涉及到修改

 

除此以外,flask-login所處的空間是項目(環境)的site-package包當中。因此內部引用的時候有一些相關文件的引用。我將這個包提取出來。然后修改所有我代碼當中指向這個文件的引入。希望這個文件的移植性更好。但是結果是SQLAlchemy在構建類的時候就錯誤了。項目無法啟動。所以暫時我又把這個模塊給放回去了。

 

但是這個模塊的功能無非也就是一些簡單的裝飾器。所以在開發的第二階段。可能的情況下,還是自己寫裝飾器更好一些。

一般來說,裝飾器類會寫在app/decorator.py這個路徑下面。這樣在引用的時候更方便一些。當然在每個文件中寫一些內部的裝飾器類函數也是可以的。不過我感覺不方便管理。至少修改的時候就比較麻煩

 

裝飾器+語法糖,對於開發效率和代碼可讀性是一個很大的提升。在學這個的時候明白了面向切面編程是一個什么東西。

def permission_required(permission):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if not current_user.can(permission):
abort(403)
return f(*args, **kwargs)
return decorated_function
return decorator

這是比較簡單的實現方法。除了這種外,還能用來在執行函數之后輸出消息。先寫到這里。下班。


免責聲明!

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



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