我试图将ACL权限存储到LDAP。 我有权限用户和组(用户属于多个组)。 这里是我创build的结构:
ou=Groups cn=Admin [posixGroup] {memberUid=andrew, memberUid=johny} cn=Right {resource:ftp1, action:all} cn=Right {resource:ftp2, action:all} cn=Editor [posixGroup] {memberUid=joseph} cn=Right {resource:ftp1, action:list} ou=People cn=andrew {uid=andrew} cn=Right {resource:ftp3, action:all} cn=johny {uid=johny} cn=joseph {uid=joseph}
括号{}中有属性。 那么,在安德鲁连接到ftp3时,我想检查权限,所以我查询:
(|(memberUid=andrew)(uid=andrew))
但我只得到cn = Rights:cn = andrew和cn = Admin的父元素。 是否有可能编写查询返回cn = Right元素使用filter由memberUid在父母中定义的uid元素? 或者结构必须改变某种方式。 非常感谢您的宝贵时间。 安德鲁
用你现在的模式,我相信你必须做两套查询:
Right
条目,将基本DN设置为您在步骤1中find的条目。 或者您可以更改结构,以便用户和组具有多值right
条目,可能类似于:
cn=Admin [posixGroup] {memberUid=andrew, memberUid=johny, right: ftp1/all, right: ftp2/all} cn=Editor [posixGroup] {memberUid=joseph, right: ftp1/list} ... cn=andrew {uid=andrew, right: ftp3/all}
你的查询将是相同的,但你会在返回的集合中得到right
属性(不必做任何进一步的查询)。 或者,如果您知道在查询时请求的服务和权限级别,则也可以将其放入:
(&((|(memberUid=andrew)(uid=andrew)))(right=ftp3/all))
如果您至less得到一个结果,那么您知道您可以授予访问权限; 否则,拒绝访问。