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