Subversion 实现精细的目录访问权限控制

Subversion实现精细的目录访问权限控制 立即下载

本文从一个实际的例子入手,介绍了如何利用 Subversion 自带的目录管理功能,来实现对项目目录的精细访问权限的控制。同时描述了在配置的过程中,需要注意的一些地方,如对中文的处理等。


在实际的使用中,由于项目的目录本身就是作为版本库的一个部分被svn所收管,所以我们无法利用服务器操作系统的访问权限,来实现项目目录的访问控制。因此,这个问题就只有让svn自己来解决了。

Subversion 1.3以前的版本,只能利用 mod_authz_svn.so 模块,结合Apache服务器来实现目录访问控制,这对Apache的配置与使用不是很熟悉的人来说(比如说鄙人)就不是很方便了。而Subversion终于在 1.3 版本上,在 svnserve.exe 服务器里面添加了这一功能。本文就是介绍如何配置代码库配置文件,以便让 svnserve.exe 实现精细的目录访问权限控制。

本文是基于 Subversion 1.3.2、MS Windows 2003 Server Edition 平台来编写的,且 Subversion 服务器是利用 svnserve.exe 来架设的。不过,本文讲述到的绝大多数内容,都是不仅与平台无关,而且与是采用 svnserve(.exe) 还是使用apache来作为 Subversion 服务器也基本无关。

实战
====

本章先直接给出需求及其最终的结果,如果你觉得对配置有什么疑问,或者看不懂,请不要着急,我会在后面的章节详细描述的。


背景假设
--------

厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计、销售,并在北京、上海各设立了一个办事处。对于工作日志,原先采用邮件方式发给经理,但是这种方式有个缺点,那就是不具备连续性,要看以前的日志必须一封一封邮件去查看,很麻烦。于是就想到利用 Subversion, 让员工在自己电脑上编辑日志,然后利用svn传送回来,既方便员工自己编写日志,又方便对日志的归档处理,而且提交日志的时候只需要执行一下 svn commit 即可,比发送邮件还要简单的多。

- svn服务器相关信息

  - 服务器地址: 192.168.0.1
  - 服务器OS: MS Windows 2000 Server Edition 中文版
  - 代码库本地目录: "D:/svn/arm"

- arm部门文档的目录结构如下::

    arm                 部门名称
    ├─diary           工作日志目录
    │  ├─headquarters    总部工作日志目录
    │  ├─beijing         北京办日志目录
    │  └─shanghai        上海办日志目录
    ├─ref             公司公共文件参考目录
    └─temp            临时文件目录

- 人员情况

  - morson,公司总经理,其实他不必亲自看任何东西,就连部门经理们的每周总结都不一定看。但是为了表示对他的尊敬,以及满足一下他的权力欲,还是给他开放了“阅读所有文档”的权限
  - michael,arm事业部的部门经理,没事的时候喜欢弄点儿新技术,用svn来管理日志,就是他想出来的主意
  - scofield,北京办人员,老员工,为人油滑难管
  - lincon,上海办人员,老员工,大老实人一个
  - linda,总部协调员、秘书,文笔不错,长得也不错
  - rory,单片机技术员,技术支持

- 访问权限需求分析

  - 允许总经理、部门经理读取所有文件。顺便给他们开放写权限,以便体现对他们职位的尊重,虽然对于某些文件来说,他们若拥有“写”权限其实也没什么用处
  - 除部门经理外,所有其他人员,均只能看到本办事处人员工作日志
  - 不允许匿名访问
  - ref目录只允许经理和秘书读写,对其他人只读
  - temp目录人人都可以随意读写


建立代码库
----------
在服务器 "D:/svn" 目录下,建立 arm 代码库,命令如下::

    D:/svn>svnadmin create arm

在客户机 "F:/temp" 目录下,建立好上述目录结构

用命令 "F:/temp>svn import arm svn://192.168.0.1/arm" 导入结构

【注意点:关于导入时候的细微差别】


编辑代码库基础配置文件
----------------------
编辑代码库 "arm/conf/svnserve.conf" 文件,如下::

    [general]
    password-db = passwd.conf
    anon-access = none
    auth-access = write
    authz-db = authz.conf


管理用户帐号
------------
新建代码库 "arm/conf/passwd.conf" 文件,如下::

    [users]
    morson = ShowMeTheMoney
    michael = mysecretpassword
    scofield = hellolittilekiller
    lincon = asyouknows111
    rory = 8809117
    linda = IlikeWorldCup2006


建立目录访问权限控制文件
------------------------
新建代码库 "arm/conf/authz.conf" 文件,内容如下::

    [groups]
    g_vip = morson
    g_manager = michael
    g_beijing = scofield
    g_shanghai = lincon
    g_headquarters = rory, linda
    g_docs = linda

    [arm:/]
    @g_manager = rw
    * = r

    [arm:/diary/headquarters]
    @g_manager = rw
    @g_headquarters = rw
    @g_vip = r
    * =

    [arm:/diary/beijing]
    @g_manager = rw
    @g_beijing = rw
    @g_vip = r
    * =

    [arm:/diary/shanghai]
    @g_manager = rw
    @g_shanghai = rw
    @g_vip = r
    * =

    [arm:/ref]
    @g_manager = rw
    @g_docs = rw
    * = r

    [arm:/temp]
    * = rw

测试
----
在服务器上,打开一个 DOS Prompt 窗口,输入如下指令::

    svn co svn://127.0.0.1/arm --no-auth-cache --username rory --password 8809117

我们应该得到如下目录结构::

    arm
    ├─diary
    │  └─headquarters
    ├─ref
    └─temp

然后修改ref目录下任意文件并提交,服务器将会报错“Access deni”


深入
====

本章将详细介绍前一章所涉及的两个配置文件, svnserve.conf 和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义。

这里首先要注意一点,任何配置文件的有效配置行,都不允许存在前置空格,否则程序会无法识别。也就是说,如果你直接从本文的纯文本格式中拷贝了相关的配置行过去,需要手动将前置的4个空格全部删除。当然了,如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使,那么也许 UltraEdit 的“Column Mode”编辑模式,可以给你很大帮助呢。


svnserve.conf
-------------

"arm/conf/svnserve.conf" 文件,是 svnserve.exe 这个服务器进程的配置文件,我们逐行解释如下。

首先,我们告诉 svnserve.exe,用户名与密码放在 passwd.conf 文件下。当然,你可以改成任意的有效文件名,比如默认的就是 passwd::

    password-db = passwd.conf

接下来这两行的意思,是说只允许经过验证的用户,方可访问代码库。 那么哪些是“经过验证的”用户呢?噢,当然,就是前面说那些在 passwd.conf 文件里面持有用户名密码的家伙。这两行的等号后面,目前只允许 read write none 三种值,你如果想实现一些特殊的值,比如说“read-once”之类的,建议你自己动手改源代码,反正它也是自由软件::

    anon-access = none
    auth-access = write

接下来就是最关键的一句呢,它告诉 svnserve.exe,项目目录访问权限的相关配置是放在 authz.conf 文件里::

    authz-db = authz.conf

当然,svn 1.3.2 引入本功能的时候,系统默认使用 authz 而不是 authz.conf 作为配置文件。不过由于鄙人是处女座的,有着强烈的完美主义情结,看着 svnserve.conf 有后缀而 passwd 和 authz 没有就是不爽,硬是要改了。


authz.conf 之用户分组
---------------------

"arm/conf/authz.conf" 文件的配置段,可以分为两类,"[group]" 是一类,里面放置着所有用户分组信息。其余以 "[arm:/]" 开头的是另外一类,每一段就是对应着项目的一个目录,其目录相关权限,就在此段内设置。

首先,我们将人员分组管理,以便以后由于人员变动而需要重新设置权限时候,尽量少改动东西。我们一共设置了5个用户分组,分组名称统一采用 "g_" 前缀,以方便识别。当然了,分组成员之间采用逗号隔开::

    [groups]
    # 任何想要查看所有文档的非本部门人士
    g_vip = morson

    # 经理
    g_manager = michael

    # 北京办人员
    g_beijing = scofield

    # 上海办人员
    g_shanghai = lincon

    # 总部一般员工
    g_headquarters = rory, linda

    # 小秘,撰写文档
    g_docs = linda

注意到没有, linda 这个帐号同时存在“总部”和“文档员”两个分组里面,这可不是我老眼昏花写错了,是因为 svnserve.exe 允许我这样设置。它意味着,这个家伙所拥有的权限,将会比他的同事 rory 要多一些,这样的确很方便。具体多了哪些呢?请往下看!


authz.conf 之项目根目录
-----------------------

接着,我们对项目根目录做了限制,该目录只允许arm事业部的经理才能修改,其他人都只能眼巴巴的看着::

    [arm:/]
    @g_manager = rw
    * = r

- "[arm:/]" 表示这个目录结构的相对根节点,或者说是 arm 项目的根目录

- 这里的 "@" 表示接下来的是一个组名,不是用户名。你当然也可以将 "@g_manager = rw" 这一行替换成 "michael = rw" ,而表达的意义完全一样。

- "*" 表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部门经理外的其他所有人”,当然也包括总经理那个怪老头

- "* = r" 则表示“那些人只能读,不能写”


authz.conf 之项目子目录
-----------------------

然后,我们要给总部人员开放日志目录的读写权限::

    [arm:/diary/headquarters]
    @g_manager = rw
    @g_headquarters = rw
    @g_vip = r
    * =

- 我敢打赌,设计svn的家伙们,大部分都是在 unix/linux 平台下工作,所以他们总喜欢使用 "/" 来标识子目录,而完全忽视在 MS Windows 下是用 "/" 来做同样的事情。所以这儿,为了表示 "arm/diary/headquarters" 这个目录,我们必须使用 "[arm:/diary/headquarters]" 这样的格式。

- 这里最后一行的 "* =" 表示,除了经理、总部人员、特别人士之外,任何人都被禁止访问本目录。这一行是否可以省略呢?

- 之所以这儿需要将 "@g_vip = r" 一句加上,就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力,则他会和其他人一样,被 "*" 给排除在外。

- 如果众位看官中间,有谁玩过防火墙配置的话,可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样,那就是各个配置行之间,没有 **先后顺序** 一说。也就是说,如果我将本段配置的 "* =" 这一行挪到最前面,完全不影响整个配置的最终效果。

- 请注意这儿,我们并没有给 "arm/diary" 目录设置权限,就直接跳到其子目录下进行设置了。我当然是故意这样的,因为我想在这儿引入“继承”的概念。

- **权限具备继承性** 任何子目录,均可继承其父目录的所有权限,除非它自己被明确设置了其他的权限。也就是说,在 arm 目录设置权限后, "arm/diary" 目录没有进行设置,就意味着它的权限与 arm 目录一样,都是只有经理才有权读写,其他人只能干瞪眼。

- 【 * =  是否可以省略】【用例子引入覆盖】【单用户权限的继承问题】【父目录权限集成与全面覆盖问题】

现在来看看

好了,我们现在掌握了“继承”的威力,它让我们节省了不少敲键盘的时间。可是现在又有一个问题了,

属性具备覆盖性质
子目录若设置了属性,则完全覆盖父目录。

 

authz.conf 的其他注意点
-----------------------

1. 父目录的 "r" 权限,对子目录 "w" 权限的影响

把这个问题专门提出来,是因为在1.3.1及其以前的版本里面,有个bug,即为了子目录的写权限,项目首目录必须具备读权限。因此现在使用了1.3.2版本,就方便了那些想在一个代码库存放多个相互独立的项目的管理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做 diary,而arm事业部只是其中一个部门,则可以这样做::

    [diary:/]
    @g_chief_manager = rw

    [diary:/arm]
    @g_arm_manager = rw
    @g_arm = r

这样,对于所有arm事业部的人员来说,就可以将 svn://192.168.0.1/diary/arm 这个URL当作根目录来进行日常操作,而完全不管它其实只是一个子目录,并且当有少数好奇心比较强的人想试着 checkout 一下 svn://192.168.0.1/diary 的时候,马上就会得到一个警告“Access deni”,哇,太酷了。


2. 默认权限

如果说我对某个目录不设置任何权限,会怎样?马上动手做个试验,将::

    [diary:/]
    @g_chief_manager = rw

改成::

    [diary:/]
    # @g_chief_manager = rw

这样就相当于什么都没有设置。在我的 svn 1.3.2 版本上,此时是禁止任何访问。也就是说,如果你想要让某人访问某目录,你一定要显式指明这一点。这个策略,看起来与防火墙的策略是一致的。

 

3. 只读权限带来的一个小副作用

若设置了::

    [arm:/diary]
    * = r

则svnserve认为,任何人,都不允许改动diary目录,包括删除和改名,和新增。

也就是说,如果你在项目初期创建目录时候,一不小心写错目录名称,比如因拼写错误写成 dairy,以后除非你改动 authz.conf 里面的这行设置,否则无法利用 svn mv 命令将错误的目录更正。


改进
====

对中文目录的支持
----------------

上午上班的时候,Morson 来到 Michael 的桌子前面,说道:“你是否可以将我们的北京办、上海办目录,改成用中文的,看着那些拼音我觉得很难受?” Michael 心想,还好这两天刚了解了一些与 unicode 编码相关的知识,于是微笑地回答:“当然可以,你明天下午就可以看到中文目录名称了。”

1. 使用 svn mv 指令,将原来的一些目录改名并 commit 入代码库,改名后的目录结构如下::

    arm
    ├─工作日志
    │  ├─总部人员
    │  ├─北京办
    │  └─上海办
    ├─公司公共文件参考目录
    └─临时文件存放处

2. 修改代码库的 authz.conf 文件,将相应目录逐一改名

3. 使用 UltraEdit 将 authz.conf 文件转换成不带 BOM 的 UTF-8 格式

   将配置文件转换成 UTF-8 格式之后,Subversion 就能够正确识别中文字符了。但是这里需要注意一点,即必须保证 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的缩写,指 UNICODE 文件头部用于指明高低字节排列顺序的几个字符,通常是 "FF FE" ,而将之用 UTF-8 编码之后,就是 "EF BB BF" 。由于 UTF-8 文件本身不存在字节序问题,所以对 UTF-16 等编码方式有重大意义的 BOM,对于 UTF-8 来说,只有一个作用——表明这个文件是 UTF-8 格式。由于 BOM 会给文本处理带来很多难题,所以现在很多软件都要求使用不带 BOM 的 UTF-8 文件,特别是一些处理文本的软件,如 PHP、 UNIX 脚本文件等,svn 也是如此。

  目前常用的一些文本编辑工具中,MS Windows 自带的“记事本”里面,“另存为”菜单保存出来的 UTF-8 格式文件,会自动带上 BOM 。新版本 UltraEdit 提供了选项,允许用户选择是否需要 BOM,而老版本的不会添加 BOM。请各位查看一下自己常用的编辑器的说明文件,看看它是否支持这个功能。

  利用 UltraEdit ,我们可以将 BOM 去掉。方法是,首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8 即可。 

Triton server的部署、构建、backend插件机制代码梳理、模型加载、自定义C++backend流程 Triton inference server的部署、构建、backend机制代码详细梳理、模型加载过程、自定义C++backend流程. 阅读详情

相关推荐

OpenClaw 企业级自动化系统架构设计与实现

本文介绍基于 OpenClaw 构建的企业级自动化系统的完整架构设计、技术选型、实现细节和性能优化方案。

2604_95445636的博客 482

[转]Subversion的权限控制

在阅读本文之前,请确定你已经知道了Subversion基本的服务器管理,知道了svnserve或Apache的配置,清楚如何设置用户和密码。关于svnservee的配置可以看我们的《Subversion快速入门教程》和《用Apache和Subversion搭建安全的版本控制环境》,对于一些细节情参考《使用Subversio...

weixin_30873847的博客 150

HFSS学习记录——0. HFSS软件安装(ANSYS Electromagnetics Suite 2023 R1)

HFSS 2023 R1安装步骤

plmxu34的博客 15万+

Subversion之路

Subversion之路实现精细的目录访问权限控制 作者: 郑新星 联系: zhengxinxing gmail com 状态

面壁十年图破壁,难酬蹈海亦英雄. 982

PX4实战指南:通过遥控器通道映射实现多舵机PWM精准控制

本文详细介绍了通过PX4飞控的AUX PWM接口实现遥控器通道映射控制多舵机的实战指南。内容包括硬件选型与连接、软件参数配置、通道映射方法以及常见问题排查,帮助开发者精准实现无人机舵机PWM控制,适用于云台、机械臂等扩展功能开发。

ee345的博客 304

从想法到零件:手把手拆解一个汽车功能如何从PRD写到SSTS和CTS

本文详细拆解了汽车电子需求从市场文档(MRD)到零部件技术规范(CTS)的完整流程,以雨天自动关窗功能为例,展示了PRD、SSTS和CTS的编写要点与交互设计。文章重点解析了系统分解的艺术和零部件落地的精确参数要求,为汽车电子工程师提供了从概念到实现的全流程实践指南。

weixin_30300225的博客 481

[转]SVN实现精细的目录访问权限控制

目 录 1   前言 1.1   Subversion 权限简介 1.2   其他信息 2   致谢 3   实战 3.1   背景假设 3.2   使用 svnserve.exe 作为 Subversion 服务器 3.2.1   启动 Subversion 服务 3.2.2   建立代码库 3.2.3   编辑代码库基础配置文件 3.2.4   管理用户帐号 3.2.5   建...

jackjune 952

大数据知识面试题-通用(2026版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 2万+

Subversion配置子目录权限时的错误

昨天添加一个新的代码库,需要对子目录做读写权限的控制,本来是一件很简单的事情:Cent OS上配置Apache2 + SVN(续)实现对目录访问的精确控制可是添加完成以后,就出现了问题了。[repo:/] user1 = rw user2 = r user3 = r [repo:/client/] user2 = rw [repo:/server/] user3 = rw三个用户都可以正常Ch

mydeman的学习日志 4387

如何在飞腾平台上安装Ubuntu操作系统

注意: 若主板上配置的是NVME硬盘,在进行内核配置时,需要将内核的NEME驱动勾选上,否则移植内核时,无法找到文件系统,进不去操作系统。可以通过rufus软件将镜像做到U盘中,本次使用版本为Rufus 3.9.124 ,其他版本也可以。不要下载live版本的,没有准备网络环境,是一个头疼的事情,笔者暂时没有实现网络安装。将U盘接到主板usb口上,接上串口,显示器,,必需串口有打印才可以安装。可以通过dd命令,将iso安装到U盘。安装的是最小系统,缺少很多命令,需要联网更新,或则更换飞腾专用内核。

技术联盟 2645

【毕设救星】从0到1打造YOLOv8货架商品检测与可视化系统,让你的毕设脱颖而出

本文介绍了一个基于YOLOv8的货架商品检测系统毕设项目。系统采用YOLOv8模型进行商品检测,包含环境搭建、数据集准备、模型训练与验证等完整流程,并开发了可视化UI界面。项目聚焦智能零售应用场景,技术栈完整且易于实现,适合作为计算机视觉方向的毕业设计。文章详细指导了从数据标注、模型训练到界面开发的全过程,提供代码示例和实用建议,帮助学生快速完成毕设并提升答辩表现。

LXY_LOVE36的博客 103

配置Subversion目录访问权限

 这里所说的是通过Apache用http方式访问Subversion的情况。刚开始一直以为是在subversion的配置文件中进行配置,发现根本不起作用。后来发现授权文件应该在Apache的配置文件中进行声明。也就是在Apache的配置文件中加入下面一行内容:AuthzSVNAccessFile /home/svn/myproject/conf/authz而authz文件的编写网上有很

itegel的专栏 764

Android 车载应用之快速入门

车载 Android 系统也被称为 Android Automotive OS,是对原始 Android 系统的一个功能扩充版本。与手机系统一样,Android Automotive OS 源代码完全开放,第三方供应商和汽车制造商可以官方源码的基础上自行开发和拓展,无论是编程语言还是各项接口,都与 Android 系统保持了一致。

xiangzhihong8的专栏 1110

Subversion之路-实现精细的目录访问权限控制

本文从一个实际的例子入手,介绍了如何利用 Subversion 自带的目录管理功能,来实现对项目目录的精细访问权限的控制。同时描述了在配置的过程中,需要注意的一些地方,如对中文的处理等。目 录 1   前言 1.1   Subversion 权限简介 1.2   其他信息 2   致谢

guoguo1980的专栏 1086

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Subversion之路---实现精细的目录访问权限控制

Subversion之路---实现精细的目录访问权限控制<转> Subversion之路-----实现精细的目录访问权限控制<转> 原文:http://swjr.blog.com.cn/archives/2006/TheRoadToSubversion1authz.shtml 目 录 1 前言 1.1 Subversion 权限简介 1.2 ...

weixin_34112900的博客 1197

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Subversion之路--实现精细的目录访问权限控制

转载于:http://bbs.iusesvn.com/thread-6-1-1.html   Subversion之路 ================ ---------------------------- 实现精细的目录访问权限控制 ---------------------------- :作者: 郑新星 :联系: zhengxinxing gmail com :

zgmzyr的专栏 1541

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Subversion之路实现精细的目录访问权限控制

Subversion之路实现精细的目录访问权限控制 作者: 郑新星 联系: zhengxinxing gmail com 状态:

csj50的专栏 1383

(转)Subversion之路实现精细的目录访问权限控制

作者: 郑新星 联系: zhengxinxing gmail com 状态: 正稿

ZHB_McCoy的专栏 1083

Subversion之路 (实现精细的目录访问权限控制)

摘要本文从一个实际的例子入手,介绍了如何利用 Subversion 自带的目录管理功能,来实现对项目目录的精细访问权限的控制。同时描述了在配置的过程中,需要注意的一些地方,如对中文的处理等。  1   前言 1.1   Subversion 权限简介 1.2   其他信息 2  

517
上一篇: Win32下快速建立Subversion服务器
下一篇: 朝阳似火,全民炒股
daxu
博客等级 码龄23年 2粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值