栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Subversion - Python生成authz文件

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Subversion - Python生成authz文件

需求

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

 

分析

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

 

实现
# 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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号