这个问题的发现,也很意外!也许也有人知道这个玩法?但多数人只有用到了一层组嵌套!或者只是知道这样能用,并不知道svn的权限层次判断关系。
上次很偶然,因为公司的svn代码目录结构非常的繁琐,然后各种人需要各种各样的权限。
多数人在控制权限的时候,可能分为严格权限和非严格权限,也就是 "*=","*=r" 或者可读写。那问题就出来了,当严格权限控制的时候,就会出现下面这种状况,(no date)了,这就是设置了"*="的原因。如下图
而在数据段出现这种no date,就代表一些对此目录有读写权限也没用了,他们不能在上一级直接把此目录结构全部checkout下来。比如下面这种机构,你认为会出现什么情况
[/] A = rw B = rw *= [a:/AA] A = rw B = rw *= [a:/AA/BB] A = rw C = rw
会出现跟上图一样的no date,但有权限访问的人访问进去里面的确有数据。
比如,在"/AA/BB/"下面还有无数个用户"C"可以访问的目录,那这种情况会让用户"C"在checkout的时候无法直接"svn co ip/a"这样下载完整的结构和代码(这里的完整不是说代码下载不完全,而是无法下载),下载后你会发现只有不存在"no date"的代码文件夹才能被下载下来,其他的均不会下载。也就是说,用户"C"要去下载"AA"和"BB"目录内的内容,就必须去单独下载AA、BB。
这是为什么?
就是因为"*=",他是优先条件。svn的权限的优先级我猜想应该是这样的,先判断" * > username > 一层组 > 多维层组 "。
想必,细心的人已经注意到了“多层组”,我不知道叫多维层组对不对。反正暂时这样定义吧。
回顾一下,几个符号在svn的权限配置文件内的意义:
*:所有任何用户;
username:用户名;
@:代表组;
那多维层组是什么?
其实还是用"@"来表示,但需要组对组来赋值。所以我说有很多人都用组嵌套,但没去联想他们的权限问题。
为什么用@来控制,其实就是为了避免"no date"、还有配置内写独立姓名带来的不方便,主要是对权限控制好维护。
建议上面用户、组配置,下面是目录权限的框架。
避免使用"*="和直接填写"用户名 = rw"这种,也就是说要把你之前的权限级别提高两个等级,去掉"*="、直接用户名两个权限。
以前: * username @group
现在: @group 一个即可,但在配置区,要好好配置,组和组的权限控制比较绕,所以这时就考验你的大脑逻辑了。 我用的方法大概就是组套组,@,@@,@@@这种嵌套方法,大概意思如下:这些组之间是有用户交叉的
@group1=a,aa,aaa @group2=b,bb,aaa @group3=c,a,bb @A=@group1,@group2 @B=@group1,@group3,c @browse=@group1,@group2,@group3 [a:/] #三个组内用户均可以查看浏览,其他正常应该都使用给查看,而因为browse的级别最低,所以你可以通过多组来控制这个 @browse = r [a:/A] #这里他会判断这里面的最低权限,而@browse的组级别低,所以会先判断group1和group2,如果包含着按此权限来控制不走browse权限,否则直接browse权限 @group1 = rw @group2 = r [a:/A/B] #这时候b,bb,aa是无法访问的,这时如果在图片界面上来看就是no date状态,而其他人(@B内但不包含@group2组内)的用户着不会显示no date @group2 = @B = rw @browse =
这个我如果只靠写是的确写不出来的,所以只能让大家去看了,这里我上传一个我个人写的。里面可能有很多改的地方,所以大家不要纠结这个地方可能有会有我写错误的。你只要结果就可以了,自己多实践。虽然百度可能摆不出,google也捣鼓不出这个内容。
大概内容如下: (图里面有几个路径是无用的,仅配置文件的一部分)
这个权限说出来真的很烦人,但你要是用的好,还真舒服。不知道有几个人能看明白,反正如果是我没有去弄过,也还真想出这里面乱七八糟的关系!太繁琐了,一层套一层的。
0 条评论。