惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
腾讯CDC
D
Docker
G
Google Developers Blog
D
DataBreaches.Net
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
The Cloudflare Blog
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
量子位
美团技术团队
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - hbiftsaa

Live Writer的Code Highlighter插件 在.NET中使用COMAdmin组件管理COM+组件 使用Web Service Interface. O/R Mapping再乱弹 blog切换到 http://www.robinzhong.com/ Infopath Cookies(2) - hbiftsaa - 博客园 Infopath Cookies(1) 在Biztalk中使用Log功能:) 定制FxCop规则--检测Release版本中的TestCase 电影《幸存者游戏》的管理启示 回来了~..终于回来了... 先和大家告别一段时间了啊:) 转自DRL:向FlashFXP索取上传速度 在SP2中加速P2P类软件 爽啊~进入决赛了:) [建议] [号召] 征求博客园园标 [建议] 提问区的文章加入问题的解决方法/方案 hoho,,,要回家了:) Gmail New Features!
增强SVN的Commit权限控制
hbiftsaa · 2005-04-03 · via 博客园 - hbiftsaa

有好长时间没有写过Blog了...具体的原因真是一大堆啊,不说也罢,反正,偶现在是回来了:)
嘿嘿.

The Return of the hBifTS.

这几天一直在玩SubVersion,据说是比CVS更加好用的,更加强大的版本控制系统...
它的优点有很多,具体就不在这里介绍了.随便Google一把,都会有一大堆的:)

SubVersion的Server的实现有两种形式,一种就是和Apache的集成,可以实现http/https的访问.而且还可以很方便的通过Apache的集成来实现Per-Directory的认证.
另一种方式就是使用svnserve.exe.这是SubVersion内置的服务器.使用起来要比与Apache要方便,快捷很多.
其功能也相差不了多少(厄,还是相差很多的.)

现在的一个问题就是使用svnserve的方式,不支持Per-Directory的权限认证.
让我们来考虑一下怎么实现Per-Directory的权限认证.
实现这样的方式,我们得得到当前提交者的UserName,然后就是提交者的提交的路径.有了这两个,就可以通过相应的权限规则来判断是否有权限提交到些目录下面.最后一个就是能确认提交或是取消提交,否则权限控制完全没有意义了:)

由于Svn是用C/C++写的,而且提供了相应的.h文件,便于二次开发/增加插件功能.但是对于C#而言,就是一个恶梦(想想成堆的结构的声明,函数的导入),幸好SubVersion提供了Hooks Script,可以让我们在Start-commit/pre-commit/post-commit的时候做我们想做的事.既然这样,实现一个类似Per-Directory的认证就不是很困难了:)

打开一个生成的SubVersion的代码仓库,在目录下面有一个Hooks的目录,进去,我们可以看到5个文件.
打开Pre-commit.tmpl文件看看说明:

由上面的说明可得知,当Svn收到了用户提交上来的文件,在最终存入Repository前,会调用Pre-commit.exe/bat程序.同时传两个参数进去,一个就是提交的Repository的路径(服务器端的实际路径),第二个就是TXN-Name. Transaction Name,这个是用于标识此提交进程的事务ID.

有了上述的两个参数.再加上Svnlook.exe.我们就可以完成我们想做的事了~
先来看看Svnlook.exe的帮助.

通过Repository的路径和TXN可以得到当前提交者的UserName.

同上,可以得到当前提交者提交的内容以及提交类型.

呵呵,到了这里,实现权限控制的思路应该完全清楚了:)
1,通过Pre-commit.exe得到 Repository和TXN.
2,通过Svnlook.exe分别得到UserName和CommitContents
3,对UserName和CommitContents中的提交路径以及权限规则分析.
4,如果有权限提交,返回0.否则返回非0的值.

TestSvnAuth.zip

这里是我实现的一个权限控制,当然了,没有完全实现Per-Directory的权限认证.不过我想做为我自己来使用已够了:)
config.ini是配置文件,要和pre-commit.exe放置于同一目录下面.

[Config]
BaseDirectory = Cnblogs/Helper/
指明所有的用户只能在Cnblogs/Helper/路径下面提交/修改/删除文件.(注:此路径应该在svn repository中存在)

[Allow]
hbifts = dudu,steven
表明dudu和steven可以在hbifts用户的目录下面(包含子目录)即: Cnblogs/Helper/hbifts/ 进行修改.

[Deny]
Accounts = hbifts,dudu
表明hbifts和dudu不允许在此Repository中进行任何修改,提交任何文件.

注: Deny比Allow的优先级要高.由于测试的关系,我将所有的函数调用记录写入了一个.txt文件中,各位测试的时候请自行去掉些函数或修改log文件路径.由于每提交一次此程序会运行一次,从性能方式考虑,未使用xml文件做为配置文件.

Wish have a good day~