源代码管理软件Subversion是继CVS后的又一个强力开源软件,现最新版本为1.2,开始支持lock模式了。(更坚定了我 使用它的决心)而当我们使用它的svnserve提供服务时,要实现目录级的验证需要用到pre-commit这个hook。很感谢 hbifts为我们提供了实现的思路和代码(参见下面的文章链接)。我写的 程序也是基于他的solution修改而成的。

下面我说说我的改进的地方:
1、精简svnhandler.cs。感觉原来的这个比较乱,现在精简后只保留两个获取author和commit files的公共方法。
2、当权限不足,拒绝提交时,除退出码设为非零外,同时向stderr标准错误流输出提示。这样做提交者就有可能在客户 端工具中看到出错提示(如使用TortoiseSVN),不至于让人不知所然。
3、日志使用功能强大的开源log4net,方便日后的管理。(是不是有些大材小用?^_^)
4、最重要和大幅度的改进就是权限判断了。判断的准则是类似于目录权限继承。如要提交的文件是trunk/folder/file.cs, 那么首先判断trunk/folder的权限,存在trunk/folder的规则则使用之,否则再查找trunk目录的权限规则,一直到根目录为 止(此例为trunk)。若无任何的规则存在,则默认为可提交。(这个可根据你的需要修改程序)
  为配合这种判断准则,相应的配置文件也由ini改为xml。hbifts在他的文章最后提到过出于性能的考虑没有采用xml。 不过我认为svnserve一般应用在局域网的场合内,提交的频率不会太高,性能方面可以忽略。最重要的是xml更适用于上面 所说的判断准则。

  接着说一下配置文件格式。根节点为“Rules”,下级节点为“Rule”。每个Rule节点代表对一个目录的权限设定。它有 两个属性“Path”和“Default”。其中“Path”为必需项,指定要指派权限的目录名。“Default”为可选,指明当前提交者 不匹配任何一个用户名时默认的权限。取值为“Allow”或“Deny”,默认为“Allow”。“Rule”节点可带有多个下级节点。 下级节点应为“<Allow>……</Allow>”或“<Deny>……</Deny>”。每个节点对应一个用户名。若 当前提交者匹配这个用户名,则根据该节点名称(Allow或Deny)来决定他可否进行提交动作。

  由于这个程序没试过在线调试,都是通过日志、实操和分析程序来调试的,所以可能还会有些Bug。欢迎各位捉虫者多提宝 贵意见。

  使用的方法就是把编译生成的pre-commit.exe、log4net.dll、pre-commit.exe.config复制到Repository目录下的hook目录, 再新建一个XML配置文件就可以了。源码中带有一个简单的配置例子,可参考。

点击下载源码

参考资料:

  1. Subversion 主页
  2. hbifts原文《增强SVN的Commit权限控制》

转载于:https://www.cnblogs.com/fking/archive/2005/06/16/175330.html

改进的SVN的Commit权限控制相关推荐

  1. Ubuntu下搭建SVN与Apache权限控制

    1. 安装apache+svn sudo apt-get install apache2 sudo apt-get install subversion sudo apt-get install li ...

  2. vue实现路由权限控制

    我们后管理项目中经常需要对路由权限进行判定,不同的身份可以访问不同的路由. 实现的大体思路很简单,将路由分为基本路由和用户路由,基本路由所有用户均可访问,用户路由是当前用户能够访问的独有的路由. 我们 ...

  3. C#用户权限控制架构,可以控制到类【重发】

    这篇文章是在我的"园龄"不到三天的时候写的,原文地址是:http://www.cnblogs.com/fantong/archive/2012/09/14/2684856.html ...

  4. Vue 动态路由的实现以及 Springsecurity 按钮级别的权限控制

    思路: 动态路由实现:在导航守卫中判断用户是否有用户信息,通过调用接口,拿到后台根据用户角色生成的菜单树,格式化菜单树结构信息并递归生成层级路由表并使用Vuex保存,通过 router.addRout ...

  5. java 数据 权限_Java如何利用Mybatis进行数据权限控制详解

    前言 权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Bas ...

  6. 前端真的能做到彻底权限控制吗?

    有一天突然想到一个问题,web端的权限控制: 1.真的能控制权限吗? 2.仅仅靠前端,能不能做到真正的权限控制? 3.如果需要后台配合,应该如何配合? 可能这是一个老生常谈的问题,但还是想整理下,有误 ...

  7. Subversion的权限控制

    上一篇文章<Linux下安装Subversion >我们介绍在Linux下安装并以独立进程方式运行Subversion版本控制软件. 本文主要介绍Subversion怎么来做权限控制,在网 ...

  8. Flask-Login Flask-Security 登录与权限控制

    先看官方例子: from flask import Flask, render_template from flask_sqlalchemy import SQLAlchemy from flask_ ...

  9. Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)

    Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案) Windows平台下使用Active Directory对Subversion进行权限控制 ...

最新文章

  1. Java Date Time 教程-java.sql.Timestamp
  2. SAP软件项目实施要点
  3. User status for Service Order
  4. 数据库MySQL安装
  5. 红薯叶有什么营养价值?
  6. android系统各种版本所占市场比例
  7. WINDOWS PHONE死于自己不兼容
  8. pd虚拟机专用windows系统镜像(m1/intel)「新增:Intel Mac win7专业版懒人包镜像」
  9. 关于力学环境中振动试验的知识
  10. JAVA判断访问设为是否为手机、苹果、微信
  11. 大陆期货11月3日钢材日评
  12. redis搭建哨兵模式(哨兵模式原理)
  13. 为什么现代物理学离不开量子论和相对论?
  14. 电脑锁定计算机有没有难度较高的,你对电脑的刷新率了解有多少 锁定刷新率的方法...
  15. matlab构造差商表,牛顿法 代数插值 – 差商表的求法
  16. 陌陌 ZAO 脸,一念成魔一念成佛
  17. Ubuntu18.04更改国内镜像源(阿里云、网易、清华、中科大)
  18. Hadoop3.3.4最新版本安装分布式集群部署
  19. BestCoder Round #87(1003-【思维】【LISLCS】)
  20. 运维不是修电脑!月薪30K的高级运维告诉你,学会这些就能逆袭

热门文章

  1. Linux Centos7安装Oracle12c第二版本
  2. Shell - 文件运算符
  3. 订阅广告一个微博大号的微信生存记
  4. 海思Hi3519A 进行4k60 h264编码帧率不足的问题
  5. EMMC与NAND FLASH核心对比
  6. 四川一级计算机课程编码,四川省计算机一级考试真题
  7. 阿里云飞天论文获国际架构顶会 ATC 2021最佳论文:全球仅三篇
  8. 阿里云联合中国信通院发布《云计算开放应用架构》标准,加速云原生应用规模化落地进程
  9. 一张图,看懂阿里云12年的“飞天日记”
  10. Fluid 0.5 版本:开启数据集缓存在线弹性扩缩容之路