can_play 0.2.8 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -3
- data/lib/can_play/ability.rb +1 -1
- data/lib/can_play/version.rb +1 -1
- data/lib/can_play.rb +1 -1
- data/lib/generators/templates/can_play.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c1f7997bbed17c25f1f156b38fd113640be01ad
|
4
|
+
data.tar.gz: c139d5995062503127339e8782eff3d6dc240886
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 654b4a8da4423dcec5682e55ca730c039db7cc53133bbdb15f9db2b8e58cd44159e01b21080fd7ff86f2d8880561e3cd4cb8862a7e241f092510534f334e106f
|
7
|
+
data.tar.gz: a0f172eacf693264c03e16c4ea7786f6b0b1c8b553bb7ecf6c72282f3c979c2a8d34c06aedc5fe4421c19ab5182f3ebd08e3c9a5129bf5831f852eed118194e5
|
data/README.md
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
-
|
1
|
+
can_plan集成了cancancan和consul的功能,使用简单的DSL描述用户对单个资源或某类资源的操作权限,可以完整控制用户对任何资源的访问权限。如要使用它,系统必须有用户模型,推荐使用角色模型,用户可以有多个角色,然后在角色上设置权限,让单个用户,根据角色不同获取不同权限,以下示例都会基于用户和角色的模型。
|
2
|
+
|
3
|
+
![](http://7xn1q4.com1.z0.glb.clouddn.com/gem_can_play_role.png)
|
4
|
+
|
5
|
+
其中角色表在通过RoleResources这样的中间表和资源管理的权限进行关联。
|
6
|
+
![](http://7xn1q4.com1.z0.glb.clouddn.com/gem_can_play_role_resources.png)
|
7
|
+
|
8
|
+
使用Resource表做权限,字段可以有action、resource这样的字段,action表示行为,例如'create',resouce表示资源,可以是Order这样的类名。这样做当然够简单,但是主要问题是,你没法对权限做更详细的限制,例如你对供应商都赋予查看合同的权限,但是不同的供应商只能查看自己的合同,这在数据库层面是难以表示的。当然,你也可以在controller里面加入限制,但这就是将权限控制的逻辑分散开了,其实完全可以将他们集中写到一个文件中。将Resources变成一张伪表,将具体的权限限制写入一个叫resources.rb的文件,并将资源名称和具体权限名称释放出来。
|
9
|
+
|
10
|
+
![](http://7xn1q4.com1.z0.glb.clouddn.com/gem_can_play_role_real.png)
|
11
|
+
|
2
12
|
|
3
13
|
## 安装方式
|
4
14
|
|
@@ -121,9 +131,9 @@ dsl文件写法如下:
|
|
121
131
|
|
122
132
|
此处的resouce文件相当于在数据库中的resouces表,以动态的语言记录了所有的权限。我们需要通过role_resources这样的中间表,建立角色和权限之间的关联。可以在数据库建立中间表role_resources。
|
123
133
|
|
124
|
-
在controller或view中只要调用
|
134
|
+
在controller或view中只要调用 CanPlay.splat_grouped_resources_with_chinese_desc就能返回所有的权限hash,并按资源进行了分组。如果调用CanPlay.grouped_resources_with_chinese_desc则返回按module_name分组后,再按资源名称分组的权限hash。我们用这个hash在表单中呈现,让用户勾选,然后在controller中保存角色和资源权限的关联。
|
125
135
|
|
126
136
|
|
127
|
-
其中roles_resources的表结构,至少要有role_id、resource_name字段,其中role_id关联角色,而
|
137
|
+
其中roles_resources的表结构,至少要有role_id、resource_name字段,其中role_id关联角色,而 resource_name用于关联resource类(伪关联,实际不用加belongs_to这类关联)。
|
128
138
|
|
129
139
|
有了这个关联,加载页面,就可以自动执行权限的限制了,当然前提是你在controller的每个action加入了cancancan的权限限制语句authorize!。
|
data/lib/can_play/ability.rb
CHANGED
@@ -8,7 +8,7 @@ class Ability
|
|
8
8
|
can(:manage, :all) if user.send(CanPlay::Config.role_judge_method, role_name)
|
9
9
|
end
|
10
10
|
CanPlay::Config.role_class_name.constantize.all.each do |role|
|
11
|
-
next unless user.
|
11
|
+
next unless user.send(CanPlay::Config.role_judge_method, role)
|
12
12
|
role.send(CanPlay::Config.role_resources_relation_name).each do |role_resource|
|
13
13
|
resource = CanPlay.find_by_name_and_code(role_resource.resource_name, CanPlay.override_code)
|
14
14
|
next unless resource
|
data/lib/can_play/version.rb
CHANGED
data/lib/can_play.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: can_play
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- happyming9527
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|