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