2012-06-11 66 views
3

諸如Django-guardian和django權限之類的項目使您擁有對象級別權限。但是,如果兩個對象通過父子關係相互關聯,除非另有說明,否則子對象是否有任何方式繼承父對象的權限?例如,subfolder應該從parent folder繼承權限,除非用戶明確地爲子文件夾分配了不同的權限。Django中的對象級別級聯權限

使用Django,特別是Django-guardian模塊,完成此操作的最佳方法是什麼?

回答

1

當你檢查一個用戶是否有對某個對象的權限,而沒有,那麼你可以檢查它是否對它的父對象有權限。

你甚至可能想使自己的功能,例如:

def your_has_perm(user, perm, obj): 
    has = user.has_perm(perm, obj) 

    if not has and hasattr(obj, 'parent'): 
     return your_has_perm(user, perm, obj.parent) 

    return has 

這穿越的父母,直到它找到一個父許可或返回False。

+1

這將無法正常工作。你怎麼知道權限是否自動生成,如果父母權限改變,你應該改變它們? –

+0

對,我不喜歡它,答案更新了一個更簡單的方法。感謝您的反饋意見。 – jpic

+0

合理。哪裏是放置這種方法的最佳地點?此外,由於遞歸權限檢查是在代碼中完成的,因此如何查詢數據庫以獲取用戶有權訪問的所有對象的列表? – Tony