-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
297 lines (229 loc) · 14.8 KB
/
index.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
<!DOCTYPE html>
<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"><![endif]-->
<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"><![endif]-->
<!--[if IE 8]><html class="no-js lt-ie9" lang="en"><![endif]-->
<!--[if gt IE 8]<!-->
<html class="no-js" lang="zh">
<!--<![endif]-->
<head>
<meta charset="UTF-8">
<title>
理解风车的「权限系统」
- 风车官方博客 | 高效团队协作工具
</title>
<meta name="description" content="记录风车的产品更新和团队思考">
<meta name="keywords" content=" ["Announcement", "permission", "权限系统"]
">
<meta name="author" content="The Fengche.co Team">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="cleartype" content="on">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="apple-touch-icon-precomposed" type="image/png" sizes="57x57" href="/apple-touch-icon-57x57-precomposed.png">
<link rel="apple-touch-icon-precomposed" type="image/png" sizes="72x72" href="/apple-touch-icon-72x72-precomposed.png">
<link rel="apple-touch-icon-precomposed" type="image/png" sizes="114x114" href="/apple-touch-icon-114x114-precomposed.png">
<link rel="apple-touch-icon-precomposed" type="image/png" href="/apple-touch-icon-precomposed.png">
<link rel="apple-touch-icon" type="image/png" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon.png">
<link rel="shortcut icon" sizes="16x16" href="/favicon.ico">
<link rel="alternate" type="application/rss+xml" title="Fengche.co Blog Feed" href="/blog/feed.xml" />
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href="/stylesheets/application.css?1405912777" rel="stylesheet" type="text/css" />
<script src="/javascripts/application.js?1405912779" type="text/javascript"></script>
<script type="text/javascript" async="" src="http://www.google-analytics.com/ga.js"></script>
<script type="text/javascript">var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-4054156-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();</script>
</head>
<body class="understanding-permission-system understanding-permission-system_index">
<header class="navbar navbar-fixed-top" role="banner">
<div class="container">
<a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="https://fengcheco.com/" tabindex="-1">Fengche.co</a>
<nav class="nav-collapse collapse" role="navigation">
<ul class="nav pull-right">
<li><a href="https://fengcheco.com">首页</a></li>
<li><a href="https://fengcheco.com/tour">了解产品</a></li>
<li><a href="https://fengcheco.com/pricing">价格方案</a></li>
<li><a class="login" data-target="#login-modal" data-toggle="modal" href="https://fengcheco.com/login" role="button" type="button">登录</a></li>
<li class="action"><a class="signup" href="https://fengcheco.com/signup">免费注册</a></li>
</ul>
</nav>
</div>
</header>
<section class="hero wrap-blue">
<div class="container header">
<h1 class="blog-name">「风车协作」官方博客</h1>
<p> 好好做产品,做好产品 </p>
</div>
</section>
<section class="main">
<div class="container">
<article class="post single">
<header>
<h2 class="title">
<a href="/understanding-permission-system">理解风车的「权限系统」</a>
</h2>
</header>
<aside>
<ul class="meta">
<li class="author-photo">
<a href="http://beenhero.com">
<img alt="" width="120" height="120" src="/images/ben-he.png?1379005285" />
</a>
</li>
<li class="author">
by 何斌
</li>
<li class="date">
Dec 13, 2014
</li>
<li class="tags">
<a href="/tags/announcement">Announcement</a>
<a href="/tags/permission">permission</a>
<a href="/tags/权限系统">权限系统</a>
</li>
<li class="back-link">
<a href="/">‹ 返回博客主页</a>
</li>
</ul>
</aside>
<div class="content">
<p>风车发布「权限系统」一个多月了,但仍有部分用户对「权限」设置及管理存有疑惑,甚至有些新用户找不到想要的功能。有必要写一个说明文档出来,暂且发布在 blog 里。</p>
<h2>用户角色和权限</h2>
<p>权限一般通过「角色」去定义范畴,换句话说「角色」就是若干「权限」的打包应用,在风车项目中,我们从权限的小到大划分了:</p>
<h4>访客</h4>
<p>以「访客」为角色加入项目的用户,他仅拥有只读权限,而且只能访问到那些被邀请加入的任务列表,所以一个默认的新访客进入项目是看不到任何东西的。但有一个特例:访客可以在加入的任务列表里面,参与任务的讨论,这也是为了团队沟通的考虑。</p>
<p>适用场景:</p>
<pre><code class="highlight plaintext"> 1. 比如外包项目,可以把雇主联络人加入进来,他可以看到项目的进展和信息,可以参与讨论,但是不能更改任何信息。
2. 跨部门的合作方,比如加入运营人员,让他们看到任务进展和参与讨论,但不能修改信息。
3. 加入公司的决策层,他们一般只需要阅览信息,而不需要对内容进行读写操作。
</code></pre>
<h4>合作方</h4>
<p>「合作方」相比「访客」,他们拥有读写权限,仍需要被邀请加入任务列表,加入后才能对列表任务进行读写操作。</p>
<p>适应场景:
主要是对「访客」的补充,一方面是控制该角色用户的资源访问权限,一方面他对资源可见时,也意味着可读写。
比如:第三方合作时,把他们加入进来,一起协同一些任务,但仍保持对其它信息的隔离。</p>
<h4>成员</h4>
<p>一般团队成员被加入项目后的用户角色,他们对项目的所有资源都可见,并且能对列表和任务进行读写操作,比如:新建任务、修改任务信息,参与讨论等等。</p>
<p>适应场景:普通项目团队成员,放开信息读写,但不能管理列表和成员。</p>
<h4>管理员</h4>
<p>除了拥有普通成员的权限,还拥有:新建/管理列表、邀请/管理成员及其它高级功能权限(如创建私有列表,下文会提到)。</p>
<p>适应场景:项目的管理员统筹和管理整个项目的资源.</p>
<h4>创建者</h4>
<p>项目的创建者,他拥有对所有项目资源的所有掌控,包括: 管理「管理员」、用户权限分配,以及数据导出、删除项目等危险操作。</p>
<p>适应场景:项目一旦创建,创建者就拥有这个角色,如需要转移创建者,请联系我们支持。</p>
<p>具体设置权限的UI,见下图:</p>
<p><img alt="User Permission" width="580" src="/blog/images/understanding-permission/user-permission.png"></p>
<h2>私有列表</h2>
<p>注意: 这是成长型和商业型用户才拥有的功能,关于风车服务套餐请见「<a href="https://fengcheco.com/pricing">订阅方案</a>」.</p>
<p><img alt="Private List" width="575" src="/blog/images/understanding-permission/private-list.png"></p>
<p>「权限系统」是通过成员的角色来判断对资源的控制权限,所以一旦角色拥有了这个权限,他就全局拥有了,比方说普通成员对所有任务列表可读写,所以系统无法满足隐藏一些任务列表的需求。而这就是「私有列表」存在的意义。</p>
<p>管理员拥有创建「私有列表」的权限,他创建后该列表默认只有他本人可见,除非通过邀请的方式,添加成员到协作者列表,那么他们才拥有对这个「私有列表」的读写权限。</p>
<p>明白了它是怎么工作,应该很容易就想到它的使用场景,比如:</p>
<ul>
<li>邀请有限的几个成员参与协同某些任务。</li>
<li>仅自己可见的工作内容</li>
<li>产品经理或者 scrum master 收集 backlog,待合适的时候再移动到公开列表里去。</li>
</ul>
<p>一旦拥有「私有列表」很多之前需要隔离或线下的信息,现在有一个合适的'容器‘了。</p>
<h2>公开任务</h2>
<p>除了「私有」,我们用户还有「公开」的需求。比方说,有一个任务想让外部人员,甚至是普通网民访问到,但风车是一个对内的团队协作工具,除了项目成员,其他人是访问不到项目的任何资源的,所以之前有些用户选择打印或者邮件的方式分享出去。现在你可以简单的公开一个任务,然后把生成的链接分享给他,他就能访问那个链接资源,但仅仅是可读信息,他无法修改信息或参与讨论。</p>
<p><img alt="Public task" width="407" src="/blog/images/understanding-permission/public-ticket.png"></p>
<p>好了,「权限系统」「私有列表」「公开任务」应该就是风车当前对信息资源、用户、访问者的所有权限控制,现在你该知道如何更好的使用风车,来达成最合理高效地协同。任何疑问,欢迎联系我们。</p>
</div>
</article>
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'pragmaticlyblog'; // required: replace example with your forum shortname
var disqus_identifier = 'understanding-permission-system';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="//disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>
</section>
<footer class="site-footer" role="contentinfo">
<div class="container">
<div class="row">
<div class="span2 offset2">
<nav>
<h5>网站相关</h5>
<ul>
<li><a href="https://fengcheco.com/">首页</a></li>
<li><a href="https://fengcheco.com/tour">了解产品</a></li>
<li><a href="https://fengcheco.com/pricing">价格方案</a></li>
<li><a href="https://fengcheco.com/privacy">隐私政策</a></li>
<li><a href="https://fengcheco.com/terms">服务条款</a></li>
</ul>
</nav>
</div>
<div class="span2">
<nav>
<h5>服务支持</h5>
<ul>
<!--<li><a href="/help">帮助中心</a></li>-->
<li><a href="https://fengcheco.com/get-started">新手帮助</a></li>
<li><a href="mailto:support@fengche.co">联系我们</a></li>
</ul>
</nav>
</div>
<div class="span2">
<nav>
<h5>联系合作</h5>
<ul>
<li><a href="https://fengcheco.com/about">关于我们</a></li>
<li><a href="mailto:press@fengche.co">合作伙伴</a></li>
<li><a href="mailto:press@fengche.co">媒体报道</a></li>
</ul>
</nav>
</div>
<div class="span2">
<nav>
<h5>关注我们</h5>
<ul>
<li><a href="https://fengcheco.com/blog">官方博客</a></li>
<li><a class="social-weibo" href="http://weibo.com/fengcheco" target="_blank">微博</a></li>
<li>QQ群: 162278625</li>
<li><a class="social-facebook" href="https://facebook.com/fengcheco" target="_blank">Facebook</a></li>
<li><a class="social-twitter" href="https://twitter.com/#!/fengcheco" target="_blank">Twitter</a></li>
</ul>
</nav>
</div>
</div>
<div class="copyright">
<p>© 2012-2014 Fengche.co (former Pragmatic.ly)</p>
</div>
</div>
</footer>
<!-- begin olark code -->
<script data-cfasync="false" type='text/javascript'>/*{literal}<![CDATA[*/
window.olark||(function(c){var f=window,d=document,l=f.location.protocol=="https:"?"https:":"http:",z=c.name,r="load";var nt=function(){f[z]=function(){(a.s=a.s||[]).push(arguments)};var a=f[z]._={},q=c.methods.length;while(q--){(function(n){f[z][n]=function(){f[z]("call",n,arguments)}})(c.methods[q])}a.l=c.loader;a.i=nt;a.p={0:+new Date};a.P=function(u){a.p[u]=new Date-a.p[0]};function s(){a.P(r);f[z](r)}f.addEventListener?f.addEventListener(r,s,false):f.attachEvent("on"+r,s);var ld=function(){function p(hd){hd="head";return["<",hd,"></",hd,"><",i,' onl' + 'oad="var d=',g,";d.getElementsByTagName('head')[0].",j,"(d.",h,"('script')).",k,"='",l,"//",a.l,"'",'"',"></",i,">"].join("")}var i="body",m=d[i];if(!m){return setTimeout(ld,100)}a.P(1);var j="appendChild",h="createElement",k="src",n=d[h]("div"),v=n[j](d[h](z)),b=d[h]("iframe"),g="document",e="domain",o;n.style.display="none";m.insertBefore(n,m.firstChild).id=z;b.frameBorder="0";b.id=z+"-loader";if(/MSIE[ ]+6/.test(navigator.userAgent)){b.src="javascript:false"}b.allowTransparency="true";v[j](b);try{b.contentWindow[g].open()}catch(w){c[e]=d[e];o="javascript:var d="+g+".open();d.domain='"+d.domain+"';";b[k]=o+"void(0);"}try{var t=b.contentWindow[g];t.write(p());t.close()}catch(x){b[k]=o+'d.write("'+p().replace(/"/g,String.fromCharCode(92)+'"')+'");d.close();'}a.P(2)};ld()};nt()})({loader: "static.olark.com/jsclient/loader0.js",name:"olark",methods:["configure","extend","declare","identify"]});
/* custom configuration goes here (www.olark.com/documentation) */
olark.identify('8594-504-10-6122');/*]]>{/literal}*/
</script>
<noscript><a
href="https://www.olark.com/site/8594-504-10-6122/contact"
title="Contact us" target="_blank">Questions? Feedback?</a>
powered by <a href="http://www.olark.com?welcome" title="Olark
live chat software">Olark live chat software</a></noscript>
<!-- end olark code -->
</body>
</html>