Subversion - Python生成authz文件

该博客介绍了一个Python脚本,用于将Excel表格中的路径权限关系转换为Subversion的authz文件格式。脚本解析Excel文件,根据路径层级和权限设置生成authz规则,确保符合Subversion的权限继承原则。输出结果展示了转换后的权限配置。
摘要由CSDN通过智能技术生成

需求

业务以Excel表提供路径权限关系表。由于条目较多,需要以自动的方式转成Subversion authz文件。

feab918065d34172a2c351d940291a97.png

 

分析

表格可以清晰地定义各级的权限。但需要注意的是,假如角色在路径权限定义未找到,是会去找父目录、父父目录直到根目录。因此给某个角色开某个目录权限的同时,其父目录到根目录需开读权限,所有涉及到的路径的兄弟结点需关闭读写权限。

 

实现

# Author: wanlinwang
# Date:   21-Jul-2022

# Excel字段说明
# root	level1	level2	level3	level4	'no permission'	'read only'	'read & write'

import re
from openpyxl import load_workbook


repo_name = 'chip_fe'
max_level = 4
xlsx_file = '/Users/ben/Desktop/svn权限文件.xlsx'

wb = load_workbook(filename=xlsx_file, read_only=True)
ws = wb['Sheet1']

skipped_1st_row = False
abs_path_elements = ['/'] + [None for i in range(max_level)]
for row in ws.rows:
    if not skipped_1st_row:
        skipped_1st_row = True
        continue

    # 此处遍历前 max_level+1 个元素。
    # 其中,字段1是根路径。 字段2, 字段3, 字段4, 字段5,是SVN的TOP4层级目录。
    for i, cell in enumerate(row[:max_level+1]):
        if cell.value:
            abs_path_elements[i] = cell.value
            abs_path_elements[i+1:] = [None for _ in range(max_level - i)]
            # print(i, cell.value)
    # print(abs_path_elements)

    abs_path = '/'.join([i for i in abs_path_elements if i]).replace('//', '/')
    print('[' + repo_name + ':' + abs_path + ']')
    
    # 遍历row[max_level+1:max_level+1+3]三个字段,分别是'no permission'	'read only'	'read & write'。
    for i, cell in enumerate(row[max_level+1:max_level+1+3]):
        if cell.value:
            rule = cell.value.replace('\\', '')
            if i == 0:
                postfix = '='
            elif i == 1:
                postfix = '=r'
            else:
                postfix = '=rw'
            rule = re.sub('$',  postfix, rule)
            rule = re.sub('\n', postfix + '\n', rule)
            print(rule)
    print()

wb.close()

效果

/Users/ben/software/opensource/Spack/spack/opt/spack/darwin-bigsur-cannonlake/apple-clang-12.0.0/python-3.9.0-pahq2xw2i2z2wozmfcl6sktw2qh4x4et/bin/python3 /Users/ben/PycharmProjects/untitled/practice/svn_xlsx2authz.py
[chip_fe:/]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_01]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_01/code]
*=
wanlinwang=r
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_01/bin]
*=
thesre=r
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_02]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_03]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_04]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_05]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_06]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_07]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_08]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw

[chip_fe:/trunk/module_09]
*=
@user_ro=r
@g_adm=rw
@user_rw=rw


参考资料

https://svnbook.red-bean.com/en/1.7/svn.serverconfig.pathbasedauthz.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王万林 Ben

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值