guachiman 0.1.6 → 0.2.0

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: cf093d276a4515a2f1c3112adddd138ce7bceb49
4
- data.tar.gz: b2e0db7423f35752ab8d23a5548bc56501a56bd6
3
+ metadata.gz: 661a1fd0d6c130c3005dc66cc240c71a6c2454e7
4
+ data.tar.gz: a23694ba8e7c8bd23f7acbf523f70ee14d8a134f
5
5
  SHA512:
6
- metadata.gz: cccdb77e8e77682be8fb2ff70468f963c443e236df50229f7221b0cd9cabc97e9351089d87bb0fd6319b5465ad9fa465ba819911d9fc3fa755c1a09eed9770c6
7
- data.tar.gz: 37c4a59caceb7b68a8dabf9a97ae4bafce9d6acc5cd51a871612a497ca5165b7429e8c6e92c6e544da5e83b4c6d1aa555dcdc7660aedde5dbf7d2ea72275cd56
6
+ metadata.gz: f28b8f640aa087a664fc75ba082c3ebbdf48efaea481397d3294aa974017c1a7919746abaf6cf0426689a145f9b6406e7c99282cf2998b2834e7ac8b56b88de0
7
+ data.tar.gz: 981660b65337eaf03b9ac3d9f48e675d32024d8418778186b2f74ecf8e02f0174c0bb35c03ecbc89f513a267977a06a8b43425951fcff9bc82de64331ae5e9b3
data/README.md CHANGED
@@ -32,7 +32,7 @@ Run `rails g guachiman:install`
32
32
 
33
33
  This will generate a `permission.rb` file in `app/models`.
34
34
 
35
- Include `Guachiman::Permissible` in `ApplicationController` and implemente a `current_user` method there.
35
+ Include `Guachiman::Permissible` in `ApplicationController` and implement a `current_user` method there.
36
36
 
37
37
  ```ruby
38
38
  include Guachiman::Permissible
@@ -42,7 +42,7 @@ def current_user
42
42
  end
43
43
  ```
44
44
 
45
- You can also override these methods to handle failed authorizations:
45
+ You can also override these methods to handle failed authorizations for GET, non-AJAX requests:
46
46
 
47
47
  ```ruby
48
48
  def not_authorized
@@ -55,6 +55,14 @@ def not_signed_in
55
55
  end
56
56
  ```
57
57
 
58
+ And you can also override this method to handle failed non-GET or AJAX requests:
59
+
60
+ ```ruby
61
+ def render_unauthorized
62
+ render text: "NO", status: :unauthorized
63
+ end
64
+ ```
65
+
58
66
  That's it, now you can describe your permissions in this way:
59
67
 
60
68
  ```ruby
@@ -62,35 +70,33 @@ class Permission
62
70
  include Guachiman::Permissions
63
71
  include Guachiman::Params
64
72
 
65
- attr_reader :user, :request
73
+ attr_reader :current_user, :current_request
66
74
 
67
- def initialize current_user, current_request
68
- @user = current_user
69
- @request = current_request
75
+ def initialize user, request
76
+ @current_user = user
77
+ @current_request = request
70
78
 
71
- if user.nil?
79
+ if current_user.nil?
72
80
  guest
73
- elsif user.admin?
81
+ elsif current_user.admin?
74
82
  admin
75
83
  else
76
84
  member
77
85
  end
78
86
  end
79
87
 
80
- private
88
+ private
81
89
 
82
90
  def guest
83
- allow :sessions, [:new, :create, :destroy]
84
- allow :identities, [:new, :create]
85
- allow :passwords, [:new, :create]
91
+ allow :sessions, [:new, :create, :destroy]
92
+ allow :users, [:new, :create]
86
93
 
87
94
  allow_param :user, [:name, :email, :password]
88
95
  end
89
96
 
90
97
  def member
91
98
  guest
92
- allow :identities, [:show, :edit, :update]
93
- allow :passwords, [:edit, :update]
99
+ allow :users, [:show, :edit, :update]
94
100
  end
95
101
 
96
102
  def admin
@@ -99,6 +105,72 @@ class Permission
99
105
  end
100
106
  ```
101
107
 
102
- * `allow` takes a controller params key and an array of actions.
103
- * `allow_param` takes a model params key and an array of attributes.
104
- * `allow_all!` is a convinience method to allow all controlles, actions and parameteres.
108
+ * `#allow` takes a **controller** params key or array of keys and an array of **actions**.
109
+ * `#allow_param` takes a **model** params key or array of keys and an array of **attributes**.
110
+ * `#allow_all!` is a convinience method to allow **all** controllers, actions and parameteres.
111
+
112
+ You can also go a bit further in the way you specify your permissions, if you override `current_resource`:
113
+
114
+ ```ruby
115
+ class OrdersController < ApplicationController
116
+ ...
117
+
118
+ private
119
+ def current_resource
120
+ @order ||= params[:id].present? ? Order.find(params[:id]) : Order.new
121
+ end
122
+ end
123
+ ```
124
+
125
+ The `current_resource` is passed to a block that needs to return a truthy object to allow the action.
126
+
127
+ ```ruby
128
+ def guest
129
+ allow :sessions, [:new, :create, :destroy]
130
+ allow :users, [:new, :create]
131
+ allow :orders, [:show, :edit, :update] do |order|
132
+ order.accessible_by_token? current_request.cookies['cart_token']
133
+ end
134
+
135
+ allow_param :user, [:name, :email, :password]
136
+ end
137
+
138
+ def member
139
+ guest
140
+
141
+ allow :users, [:show, :edit, :update] do |user|
142
+ current_user == user
143
+ end
144
+ allow :orders, [:show, :edit, :update] do |order|
145
+ order.accessible_by_user? user
146
+ end
147
+ end
148
+ ```
149
+
150
+ You can also be more specific about the param permissions setting them to be read or write.
151
+
152
+ ```ruby
153
+ def member
154
+ ...
155
+
156
+ allow_read_param :contact, [:name, :phone, :email]
157
+ allow_write_param :contact, [:name, :phone]
158
+ end
159
+ ```
160
+
161
+ That can also be useful on the views because you get a `current_permission` helper that you can use like this:
162
+
163
+ ```erb
164
+ <%= form_for current_resource do |f| %>
165
+ <% current_permission.write_allowed_params.each do |p| %>
166
+ <%= f.text_field p %>
167
+ <% end %>
168
+
169
+ <%= f.submit %>
170
+ <% end %>
171
+ ```
172
+
173
+ License
174
+ -------
175
+
176
+ MIT
@@ -2,15 +2,15 @@ class Permission
2
2
  include Guachiman::Permissions
3
3
  include Guachiman::Params
4
4
 
5
- attr_reader :user, :request
5
+ attr_reader :current_user, :current_request
6
6
 
7
- def initialize current_user, current_request
8
- @user = current_user
9
- @request = current_request
7
+ def initialize user, request
8
+ @current_user = user
9
+ @current_request = request
10
10
 
11
- if user.nil?
11
+ if current_user.nil?
12
12
  guest
13
- elsif user.admin?
13
+ elsif current_user.admin?
14
14
  admin
15
15
  else
16
16
  member
@@ -12,11 +12,7 @@ module Guachiman
12
12
  end
13
13
  end
14
14
 
15
- def allow_resource controllers, &block
16
- allow controllers, [:index, :show, :new, :create, :edit, :update, :destroy]
17
- end
18
-
19
- def allow? controller, action, resource = nil
15
+ def allow? controller, action, resource=nil
20
16
  allowed = allow_all || check_allowed_action(controller, action)
21
17
  !!allowed && (allowed == true || resource && allowed.call(resource))
22
18
  end
@@ -6,6 +6,7 @@ module Guachiman
6
6
  before_filter :authorize
7
7
  helper_method :current_user
8
8
  helper_method :current_permission
9
+ helper_method :current_resource
9
10
  end
10
11
 
11
12
  def current_user
@@ -24,7 +25,7 @@ module Guachiman
24
25
  if current_permission.allow? controller_name, action_name, current_resource
25
26
  current_permission.permit_params! params
26
27
  else
27
- if request.get?
28
+ if request.get? && !request.xhr?
28
29
  current_user ? not_authorized : not_signed_in
29
30
  else
30
31
  render_unauthorized
@@ -1,3 +1,3 @@
1
1
  module Guachiman
2
- VERSION = '0.1.6'
3
- end
2
+ VERSION = '0.2.0'
3
+ end
@@ -24,7 +24,7 @@ class InstallGeneratorTest < Rails::Generators::TestCase
24
24
  assert_match(/class Permission/, f)
25
25
  assert_match(/include Guachiman::Permissions/, f)
26
26
  assert_match(/include Guachiman::Params/, f)
27
- assert_match(/initialize current_user/, f)
27
+ assert_match(/initialize user, request/, f)
28
28
  end
29
29
  end
30
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guachiman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Rodriguez
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-06 00:00:00.000000000 Z
12
+ date: 2013-09-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -154,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
154
  version: '0'
155
155
  requirements: []
156
156
  rubyforge_project:
157
- rubygems_version: 2.0.6
157
+ rubygems_version: 2.1.2
158
158
  signing_key:
159
159
  specification_version: 4
160
160
  summary: Basic authorization library