【1.业务需求】
部门有3个team,现需要为部门创建一个版本库,实现项目资源的“集中控制,分散管理”。即能够满足每个成员日常的工作需求,又要保护成员不能浏览与其无关的资源。
【2.基本思路】
我们在分配权限时都是按照“从严不从宽”的原则,所以在分配权限的时候必须小心谨慎---“够用就行”是不二的选择。我的模型分为3层结构:
①超级管理员:超级管理员体现了“集中控制”的原则,对所有资源具有最高rw权限。
②组管理员:组管理员体现了“分散管理”的原则,对自己组的项目管理负责
③项目组成员:包括项目组组长和普通项目组员
模型基本思想:
①超级管理员对版本库下的任何资源有rw权限
②组管理员对组内的任何资源有rw权限
③项目组成员对自己参与的项目有rw权限
④每个组的资源对其他组的成员不可见,除非特别授权
⑤每个组的资源对组内成员均可见,但只有参与成员才有写权限
⑥如果要跨组或跨项目读写,需书面向超级管理员申请开通权限
【3.示例代码】
首先来看authz这个文件中关于用户组的定义,我定义了三个基本组:group-ps,group-fix,group-bss。此外还定义了一个group-ehk组用于包含这三个组的所有成员。
为了方便我们前面提到的“分散管理”,我们还需要为每个组定义一个组管理员。这就是group-ps-admin,group-fix-admin,group-bss-admin。同样的为三个组的管理员创建一个共同组group-team-admin。为了体现我们“集中控制”的原则,我们需要定义一个最高权限的管理员组group-top-admin。
最后是定义一个包含所有人的group-all-user组。
为什么我们需要反复定义这些“组的组”?因为在为大量用户提供同一个服务时这种做法可以节省很多输入(例如为项目组,管理员组发送邮件)。
[groups]
# EHK team member
group-ps = qlinpen,qxianhu,qaobzho,qliawei,qhongguo,qzhefen,ezuokua
group-fix = qweiqlu,qguiliu,qjizhai,qcaiyun,qshilia
group-bss = qhuaxin,qliweij
group-ehk = @group-ps,@group-fix,@group-bss
# Each team administrator
group-ps-admin = qlinpen,qxianhu
group-fix-admin = qweiqlu
group-bss-admin = qhuaxin,qliweij
group-team-admin = @group-ps-admin,@group-fix-admin,@group-bss-admin
# Top level administrator
group-top-admin = admin
# All user
group-all = @group-ehk,@group-top-admin
下面我们来看关键的权限控制部分,基本结构为:svn://host_name/department_name/team_name/project_name。
每个项目的check in/out路径都可以由上面的规则构成,例如部门CBCIO下面的ps组有一个项目newsletter,那么该项目的check in/out路径为:svn://host_name/CBCIO/ps/newsletter。
示例配置:
# Root folder
[/]
@group-top-admin = rw
# Team root folder
[/ps]
@group-ps-admin = rw
@group-ps = r
[/ps/newsletter]
qlinpen = rw
[/fix]
@group-fix-admin = rw
@group-fix = r
[/bss]
@group-bss-admin =rw
@group-bss = r
[/common]
@group-ehk = r
我们的配置遵循“先小后大”的原则,在资源入口处一律收缩到最小,往下根据项目的需要逐渐扩大。而且每个组都只能访问到该组下面的资源,对于上层的/目录没有读权限。对于公用目录/common则向所有人开放。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要尽力打好一手烂牌。
posted on 2008-12-25 17:08
Paul Lin 阅读(1998)
评论(0) 编辑 收藏 所属分类:
项目管理