can_play 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+

|
|
4
|
+
|
|
5
|
+
其中角色表在通过RoleResources这样的中间表和资源管理的权限进行关联。
|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
使用Resource表做权限,字段可以有action、resource这样的字段,action表示行为,例如'create',resouce表示资源,可以是Order这样的类名。这样做当然够简单,但是主要问题是,你没法对权限做更详细的限制,例如你对供应商都赋予查看合同的权限,但是不同的供应商只能查看自己的合同,这在数据库层面是难以表示的。当然,你也可以在controller里面加入限制,但这就是将权限控制的逻辑分散开了,其实完全可以将他们集中写到一个文件中。将Resources变成一张伪表,将具体的权限限制写入一个叫resources.rb的文件,并将资源名称和具体权限名称释放出来。
|
|
9
|
+
|
|
10
|
+

|
|
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
|