-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathpsm.tdd.final.html
102 lines (101 loc) · 5.3 KB
/
psm.tdd.final.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>2.3. 最终完成的 svnauthz</title>
<link rel="stylesheet" href="/stylesheets/master.css" type="text/css">
<link rel="stylesheet" href="/stylesheets/syntax.css" type="text/css">
<link rel="stylesheet" href="/docbook/includes/css/docbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.72.0">
<link rel="start" href="index.html" title="敏捷 Web 开发实践">
<link rel="up" href="psm.tdd.html" title="2. 模型的敏捷开发">
<link rel="prev" href="psm.tdd.continued.html" title="2.2. 持续迭代">
<link rel="next" href="psm.pylons.html" title="3. 华丽外衣——Pylons造">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<script language="javascript" type="text/javascript" src="/docbook/includes/js/header.js"></script><script language="javascript"> write_header("/docbook"); </script><div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">2.3. 最终完成的 svnauthz</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="psm.tdd.continued.html"><img src="/docbook/includes/images/docbook/prev.png" alt="上一页"></a> </td>
<th width="60%" align="center">2. 模型的敏捷开发</th>
<td width="20%" align="right"> <a accesskey="n" href="psm.pylons.html"><img src="/docbook/includes/images/docbook/next.png" alt="下一页"></a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect2" lang="zh-cn">
<div class="titlepage"><div><div><h3 class="title">
<a name="psm.tdd.final"></a>2.3. 最终完成的 svnauthz</h3></div></div></div>
<p>在 Python 交互模式下测试 <code class="classname">svnauthz</code> 模组:</p>
<pre class="screen">
>>> <span class="emphasis"><em>buff = '''# admin: / = administrator</em></span>
... <span class="emphasis"><em>[groups]</em></span>
... <span class="emphasis"><em>group1=user1,user2</em></span>
... <span class="emphasis"><em>[/]</em></span>
... <span class="emphasis"><em>$authenticated=r</em></span>
... <span class="emphasis"><em>[/trunk]</em></span>
... <span class="emphasis"><em>@group1 = r</em></span>
... <span class="emphasis"><em>user3 = rw'''</em></span>
>>> <span class="emphasis"><em>import StringIO</em></span>
>>> <span class="emphasis"><em>file = StringIO.StringIO(buff)</em></span>
>>> <span class="emphasis"><em>authz=SvnAuthz()</em></span>
>>> <span class="emphasis"><em>authz.load(file)</em></span>
>>> <span class="emphasis"><em>[x.name for x in authz.reposlist]</em></span>
['/']
>>> <span class="emphasis"><em>[x.uname for x in authz.userlist]</em></span>
[u'administrator', u'user1', u'user2', u'user3']
>>> <span class="emphasis"><em>[x.uname for x in authz.userlist]</em></span>
[u'administrator', u'user1', u'user2', u'user3']
>>> <span class="emphasis"><em>[x.uname for x in authz.grouplist]</em></span>
[u'@group1', u'$authenticated']
>>> <span class="emphasis"><em>[x.uname for x in authz.aliaslist]</em></span>
[]
>>> <span class="emphasis"><em>print authz.grouplist</em></span>
[groups]
group1 = user1, user2
>>> <span class="emphasis"><em>print authz.aliaslist</em></span>
[aliases]
>>> <span class="emphasis"><em>authz.is_admin('administrator','/')</em></span>
True
>>> <span class="emphasis"><em>authz.is_admin('administrator','repos1')</em></span>
True
>>> <span class="emphasis"><em>authz.add_rules('/', '/trunk', '&admin=rw; $authenticated=')</em></span>
>>> <span class="emphasis"><em>module1 = authz.get_module('/', '/trunk')</em></span>
>>> <span class="emphasis"><em>[str(x) for x in module1]</em></span>
['@group1 = r', 'user3 = rw', '$authenticated = ', '&admin = rw']
</pre>
<p>现在是时候给 <code class="classname">svnauthz</code> 套上一个华丽一点的外衣了。</p>
</div>
<table class="copyright" border="0" cellpadding="0" cellspacing="0" width="100%">
<col width="33%">
<col width="33%">
<col width="33%">
<tr>
<td></td>
<td align="center" valign="center"></td>
<td align="right" valign="center"><p class="copyright">
Copyright © 2006 <a href="http://www.worldhello.net/doc/"><b>WorldHello 开放文档之源</b> 计划</a></p></td>
</tr>
</table>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="psm.tdd.continued.html"><img src="/docbook/includes/images/docbook/prev.png" alt="上一页"></a> </td>
<td width="20%" align="center"><a accesskey="u" href="psm.tdd.html"><img src="/docbook/includes/images/docbook/up.png" alt="上一级"></a></td>
<td width="40%" align="right"> <a accesskey="n" href="psm.pylons.html"><img src="/docbook/includes/images/docbook/next.png" alt="下一页"></a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">2.2. 持续迭代 </td>
<td width="20%" align="center"><a accesskey="h" href="index.html"><img src="/docbook/includes/images/docbook/home.png" alt="首页"></a></td>
<td width="40%" align="right" valign="top"> 3. 华丽外衣——Pylons造</td>
</tr>
</table>
</div>
<script language="javascript" type="text/javascript" src="/docbook/includes/js/footer.js"></script><script language="javascript"> write_footer("/docbook"); </script>
</body>
</html>