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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73b0f62867788c4f39fe88ff61be4558fc17b120
4
- data.tar.gz: 265701109b37442efdaa6d27f73f5613d4ed27bd
3
+ metadata.gz: 0c1f7997bbed17c25f1f156b38fd113640be01ad
4
+ data.tar.gz: c139d5995062503127339e8782eff3d6dc240886
5
5
  SHA512:
6
- metadata.gz: e174b6ea5f648c7463fa3b26a1358cbacc25b2393611f2dbb92957d9d96f28f635e9b56060bb629eb0fd209bc59d2d2fbe4da520ef5e0323e19bbb40425efc1a
7
- data.tar.gz: e91a7505c162417ebc6b52510ffa0205729e3e737e89cd5703b9d3445b34e60cfca811246f72c57f765e74d56bec158d67e5250093512660a35854fe7b68d08e
6
+ metadata.gz: 654b4a8da4423dcec5682e55ca730c039db7cc53133bbdb15f9db2b8e58cd44159e01b21080fd7ff86f2d8880561e3cd4cb8862a7e241f092510534f334e106f
7
+ data.tar.gz: a0f172eacf693264c03e16c4ea7786f6b0b1c8b553bb7ecf6c72282f3c979c2a8d34c06aedc5fe4421c19ab5182f3ebd08e3c9a5129bf5831f852eed118194e5
data/README.md CHANGED
@@ -1,4 +1,14 @@
1
- 系统权限的管理,就是控制用户对某个资源的操作权限。这里说的资源并不仅仅是指ActiveRecord::Base的子类,也可以是ruby的其他类或者模型。can_plan集成了cancancan和consul的功能,使用简单的DSL描述用户对单个资源或某类资源的操作权限。它的权限管理方式是基于角色的,不同角色可以赋予不同的权限,我们可以让用户和资源的操作权限之间建立关联并保存进数据库.
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中只要调用 CanPlay.splat_grouped_resources_with_chinese_desc就能返回所有的权限hash,并按资源进行了分组。如果调用CanPlay.grouped_resources_with_chinese_desc则返回按module_name分组后,再按资源名称分组的权限hash。我们用这个hash在表单中呈现,让用户勾选,然后在controller中保存角色和资源权限的关联。
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关联角色,而 resource_name用于关联resource类(伪关联,实际不用加belongs_to这类关联)。
137
+ 其中roles_resources的表结构,至少要有role_id、resource_name字段,其中role_id关联角色,而 resource_name用于关联resource类(伪关联,实际不用加belongs_to这类关联)。
128
138
 
129
139
  有了这个关联,加载页面,就可以自动执行权限的限制了,当然前提是你在controller的每个action加入了cancancan的权限限制语句authorize!。
@@ -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.role?(role.name)
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
@@ -1,3 +1,3 @@
1
1
  module CanPlay
2
- VERSION = "0.2.8"
2
+ VERSION = "0.2.9"
3
3
  end
data/lib/can_play.rb CHANGED
@@ -81,7 +81,7 @@ module CanPlay
81
81
  self.role_class_name = 'Role'
82
82
  self.role_resources_relation_name = 'role_resources'
83
83
  self.super_roles = []
84
- self.role_judge_method = 'role?'
84
+ self.role_judge_method = 'role_is?'
85
85
 
86
86
  def self.setup
87
87
  yield self
@@ -15,5 +15,5 @@ CanPlay::Config.setup do |config|
15
15
  config.super_roles = ['超级管理员']
16
16
 
17
17
  # 判断角色是否符合的方法。
18
- config.role_judge_method = 'role?'
18
+ config.role_judge_method = 'role_is?'
19
19
  end
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.8
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-18 00:00:00.000000000 Z
11
+ date: 2015-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler