ACL,對OpenLDAP的由OU和/或DN檢查與正則表達式組織
例如:
access to attrs=userPassword
by anonymous auth
by self write
by dn.base="ou=users_with_userPassword_write_access,dc=myproduct,dc=org" write
by dn.exact="cn=manager,dc=myproduct,dc=org" write
by * none
access to *
by dn.exact="cn=manager,dc=myproduct,dc=org" write
by dn.base="ou=users_with_powerfull_write_access,dc=myproduct,dc=org" write
by * none
所以,關於,登錄用戶與DN(whoami_s
python-ldap),你可以確定用戶是否擁有一些權利。你不需要測試你是否可以編寫數據,在你的django應用程序中實現一個檢查DN的函數。
也許你是在說,ACL是dinamically生成的?
關於你的評論,如果你的ACL是靜態的,要知道ACL的,更簡單的辦法來實現蟒蛇設施誰是實現這些訪問控制列表。與我以前爲例:
W_ACCESS_OU = "ou=users_with_powerfull_write_access,dc=myproduct,dc=org"
def check_write_access(user_dn):
return is_dn_base(W_ACCESS_OU, user_dn)
現在,蟒蛇,LDAP無法檢索的slapd.conf的ACL ......它是不是安全解析的slapd.conf(因爲slapd.conf中可以「在任何地方「在系統和ACLs聲明可能很難分析),也需要花費很多時間來嘗試在LDAP後端寫入數據。
我知道這不是很滿意。另一個解決方案是使用「服務用戶」。只有此用戶對LDAP後端具有寫權限。
它簡化了ACL的寫作:
access to *
by dn.exact="cn=manager,dc=myproduct,dc=org" write
by * none
然後,在普通用戶,您可以設置一個授權的標誌。 當您的登錄用戶想要做某件事時,您的應用程序會檢查該標誌。如果此標誌正常,則服務用戶將數據寫入後端。
這是我們在我們的應用程序中部署的策略。
在這兩種情況下,ACL的檢查都由我們的應用程序完成,而不是由ldap後端完成。
來源
2010-11-19 16:10:50
ohe
哪些LDAP服務器你使用?您使用哪種界面/綁定來訪問它? – ThomasH 2010-11-19 11:55:38
我使用openldap 2.3.32和python 2.6 ldap綁定(import ldap) – Isaac 2010-11-19 12:02:20
我發現我不需要編寫一個虛擬文件來查看我是否具有寫入權限。我可以嘗試寫入原始值,如果我沒有寫入權限,將導致錯誤,並且如果我具有讀權限,則不會更改任何內容。儘管如此,看起來不那麼優雅。 – Isaac 2010-11-19 12:08:30