OpenLDAPの上のACLは、
EX正規表現で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を知るために、静的であれば、もっと簡単な方法は、これらのACLを実装するのですPythonの機能を実装することです。私の以前のexempleと:今のところ
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)
、のpython-LDAPはslapd.confののACLを取得することはできません...そして、slapd.confのはどこでも「できるため、(slapd.confのを解析するのは安全ではありません"とシステム上のACL宣言は解析するのが難しいかもしれません)、LDAPバックエンドにデータを書き込もうとすると多くの時間を消費します。
私はこれがあまり満足できるものではないことを知っています。別の解決策は、「サービスユーザ」を使用することです。このユーザーのみがLDAPバックエンドに書き込みアクセス権を持ちます。これは、ACLの書き込み簡素化
:次に
access to *
by dn.exact="cn=manager,dc=myproduct,dc=org" write
by * none
を、通常のユーザーには、あなたは承認のフラグを設定します。 アプリケーションは、ログに記録されたユーザーが何かしたいときにフラグをチェックします。このフラグがOKの場合、サービスユーザーはバックエンドにデータを書き込みます。
これは、アプリケーションの1つに導入する戦略です。
どちらの場合も、ACLのチェックはアプリケーションによって行われ、LDAPバックエンドでは行われません。
はあなたを行う(https://www.opends.org)もOpenDSを見ることができますつかいます?どのインタフェース/バインディングを使用してアクセスしますか? – ThomasH
私はopenldap 2.3.32とpython 2.6のldapバインディング(import ldap)を使用しています – Isaac
私は書き込みアクセス権があるかどうかを調べるためにダミーを書く必要はありません。私は書き込みアクセス権がないとエラーになり、読み取りアクセス権があれば何も変更しない、元の値を書き込もうとすることができます。それでも、それほどエレガントではないようです。 – Isaac