Chinaunix

标题: 如何建立该DIT [打印本页]

作者: Dreamhat    时间: 2009-03-12 15:46
标题: 如何建立该DIT
公司的需求是这样的,有三个ou:部门,员工,商家
部门有好几个,不同的员工属于不同的部门,每个部门都有一个组长。一个员工可以访问一个或者多个商家,部门的组长可以访问其组员所有可以访问的商家。
目前dit的结构我还不知道如何建立比较合适,而且后期会有数据的更新,比方说有新员工进来。

我的想法是这样的:

  1. dc=com
  2.     dc=example
  3.         ou=部门
  4.                 cn=部门1
  5.                 cn=部门2
  6.         ou=员工
  7.                 cn=张三
  8.                 cn=李四
  9.         ou=商家
  10.                 cn=商家1
  11.                 cn=商家2
复制代码


比方说要求,张三能访问商家1,我直接在access里写对应的条目,可以实现,但是如果数据量很大,建立与维护都会很困难,因为要更新access条目。
另外部门的组长可以访问其组员所有可以访问的商家不知道该如何实现。。。。
作者: sky天空之城    时间: 2009-03-12 15:46
dc=com
    dc=example
       ou=employee
              cn=department1
              cn=department2
                  cn=Manager,cn=department1,ou=employee,dc=example,dc=com (title=manager)
                  cn=Manager,cn=department2,ou=employee,dc=example,dc=com (title=manager)
                  cn=employee1,cn=department1,ou=employee,dc=example,dc=com (title=engineer)
                  cn=employee2,cn=department1,ou=employee,dc=example,dc=com (title=engineer)
                  cn=employee3,cn=department1,ou=employee,dc=example,dc=com (title=engineer)
      ou=customer
              cn=customer1
              cn=customer2

dn: cn=Manager,cn=department1,ou=employee,dc=example,dc=com
cn: Manager
cn: department1
cn: name
uid: name
title: manager

dn: cn=employee1,cn=department1,ou=employee,dc=example,dc=com
cn: employee1
cn: department1
cn: name
uid: name
title: engineer


## department1的Manager可以wirte本部门的所有customer信息
##所有员工都可以write自己的customer记录
##所有用户具有read权限
access to dn.subtree="ou=customer,dc=example,dc=com" filter=(cn=department1)
        by dn="cn=Manager,cn=department1,ou=employee,dc=example,dc=com" write
        by self write
        by users read

## department2的Manager可以wirte本部门的所有customer信息
##所有员工都可以write自己的customer记录
##所有用户具有read权限
access to dn.subtree="ou=customer,dc=example,dc=com" filter=(cn=department2)
        by dn="cn=Manager,cn=department2,ou=employee,dc=example,dc=com" write
        by self write
        by users read

## department3的Manager可以wirte本部门的所有customer信息
##所有员工都可以write自己的customer记录
##所有用户具有read权限
access to dn.subtree="ou=customer,dc=example,dc=com" filter=(cn=department3)
        by dn="cn=Manager,cn=department2,ou=employee,dc=example,dc=com" write
        by self write
        by users read

这样一来,不需要修改ACL除非公司的部门减少或者增加,这种改动应该是非常小的。
当新的员工加入的时候也不需要修改ACL, 因为员工的权限是read或者write自己加入的客户信息.
NOTE: 唯一的要求就是,每个员工自己的客户纪录的OWNER必须是自己。这样(by self write)才能生效

[ 本帖最后由 sky天空之城 于 2009-3-23 14:32 编辑 ]
作者: Dreamhat    时间: 2009-03-12 15:58
标题: 回复 #1 Dreamhat 的帖子
不知道这样是否可行

  1. dc=com
  2.     dc=example
  3.         ou=部门
  4.                 cn=组长名字1(有group属性,然后把该组下的员工添加进去)
  5.                 cn=组长名字2(有group属性,然后把该组下的员工添加进去)
  6.         ou=员工
  7.                 cn=张三
  8.                 cn=李四
  9.         ou=商家
  10.                 cn=商家1
  11.                 cn=商家2
复制代码


这样就可以使用group.exact参数实现组长访问旗下所有组员可以访问的商家了
如果有1000个商家,就要写1000条access规则了。。。。。
作者: Dreamhat    时间: 2009-03-12 16:08
或者就两个ou
然后所有的策略全用access实现。。。

  1. dc=com
  2.     dc=example
  3.         ou=员工
  4.                 cn=张三
  5.                 cn=李四
  6.                 cn=组长1
  7.         ou=商家
  8.                 cn=商家1
  9.                 cn=商家2
复制代码

作者: aaaaaa    时间: 2009-03-12 18:37
暂时没用到这么复杂的设计,但是我看到的最复杂的ACL设置,都可以用SET的写法解决。建议你去看看http://www.openldap.org/faq/data/cache/1133.html
作者: gavinzhm    时间: 2009-03-23 22:55
直接用数据库不是更方便一些嘛~~
用LDAP实现这功能不是不可以,只是太麻烦了~
作者: MichaelBibby    时间: 2009-03-24 12:54
其实楼主自己也发现问题了,就是 ACL 的更新。所以还是建议用 SQL 这样的数据库来做更合适一些。

或者在 LDAP 里保存数据,SQL 只保存权限控制相关的内容,这样也许更合适一些,兼有 LDAP 的优势和灵活的权限控制。
作者: Dreamhat    时间: 2009-03-25 22:49
谢谢楼上各位
我把分数给打字最多的了,虽然我看不大懂
作者: diyself    时间: 2009-03-30 19:19
原帖由 Dreamhat 于 2009-3-25 22:49 发表
谢谢楼上各位
我把分数给打字最多的了,虽然我看不大懂






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2