adeia 0.10.5 → 0.11.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 +4 -4
- data/README.md +137 -1
- data/lib/adeia/controller_methods.rb +9 -4
- data/lib/adeia/version.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: 4a1ebe192b9a6f72013ede46d4c0c4e0c5216948
|
4
|
+
data.tar.gz: 10f965b7685d483496fc0a774e888572dcc2532e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9f8cef57a7f79abc2c08ca7b113a8da305aecfdabdf064e817dc1b9ef3f1f22e56d85ddabbd6f8e3437ef8da55bfda62f42a69394c86f6ca3d1cf3ee62a484e
|
7
|
+
data.tar.gz: 00af089afb586476ea97bf640fe32901da4a3a2ae9cdb4f7b911e052007e884e8aa737bfb5fab5d2fb18317f9401c85d0899a24b8a709cdba96ca0b31f8cdaf0
|
data/README.md
CHANGED
@@ -2,9 +2,145 @@
|
|
2
2
|
|
3
3
|
An authorization gem for Rails that allows you to have the complete control of your app.
|
4
4
|
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'adeia'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install adeia
|
20
|
+
|
21
|
+
Then include the engine's routes in your `routes.rb`. The URL on which you mount the engine is up to you.
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
# routes.rb
|
25
|
+
|
26
|
+
mount Adeia::Engine => "/adeia"
|
27
|
+
```
|
28
|
+
|
5
29
|
## Requirements
|
6
30
|
|
7
31
|
Requires a User model with:
|
8
32
|
|
9
33
|
* An method `name`, returning the name of the user.
|
10
|
-
* A column `remember_token`, containing a generated token
|
34
|
+
* A column `remember_token`, containing a generated token used for the authentification.
|
35
|
+
|
36
|
+
## Documentation
|
37
|
+
|
38
|
+
### Authentification
|
39
|
+
|
40
|
+
Adeia provides methods to sign in and out, to get or set the current user and to check if a user is signed in.
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
|
44
|
+
# sign in an user
|
45
|
+
sign_in @user
|
46
|
+
# alternatively, sign in permanently
|
47
|
+
sign_in @user, permanent: true
|
48
|
+
|
49
|
+
# get and set the connected user
|
50
|
+
current_user # => #<User>
|
51
|
+
current_user = @an_other_user
|
52
|
+
|
53
|
+
# check if the user is signed in
|
54
|
+
if signed_in?
|
55
|
+
# Do stuff
|
56
|
+
end
|
57
|
+
|
58
|
+
```
|
59
|
+
|
60
|
+
### Authorization
|
61
|
+
|
62
|
+
There are four different authorization methods at action-level.
|
63
|
+
|
64
|
+
`require_login!` checks if the user is signed in. It raises the exception `LoginRequired` if not.
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
def index
|
68
|
+
require_login!
|
69
|
+
@events = Event.all
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
73
|
+
`authorize!` checks if the user has the permissions to access the action. It raises `AccessDenied` if not.
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
def new
|
77
|
+
authorize!
|
78
|
+
@event = Event.new
|
79
|
+
end
|
80
|
+
```
|
81
|
+
|
82
|
+
`load_and_authorize!` loads the suitable record and checks if the user has the permissions to access the action, taking into account the loaded record. It raises `AccessDenied` if not.
|
83
|
+
The method returns the record, but it also automatically set an instance variable named after the model.
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
def edit
|
87
|
+
@event = load_and_authorize!
|
88
|
+
# assignation is optional here
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
92
|
+
`authorize_and_load_records!` loads the records taking into account the user's permissions. It raises `AccessDenied` if the user hasn't access to any records.
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
def index
|
96
|
+
@events = authorize_and_load_records!
|
97
|
+
# assignation is optional here
|
98
|
+
end
|
99
|
+
```
|
100
|
+
|
101
|
+
By default, the methods (except `require_login!`) use the following parameters:
|
102
|
+
|
103
|
+
* controller: the controller's name
|
104
|
+
* action: the action's name
|
105
|
+
* token: GET parameter `token`
|
106
|
+
* resource: fetch the resource from controller's name
|
107
|
+
|
108
|
+
You can override those parameters when invoking the method:
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
def index
|
112
|
+
authorize!(controller: 'events', action: 'new')
|
113
|
+
end
|
114
|
+
```
|
115
|
+
Adeia also provide controller-level methods to keep your code DRY.
|
116
|
+
|
117
|
+
`require_login` adds the `require_login!` method to the controller's actions.
|
118
|
+
|
119
|
+
`load_and_authorize` adds the suitable methods to the controller's actions:
|
120
|
+
|
121
|
+
* index: `authorize_and_load_records!`
|
122
|
+
* show, edit, update, destroy: `load_and_authorize!`
|
123
|
+
* new, create, other actions: `authorize!`
|
124
|
+
|
125
|
+
The two controller-level methods accepts the restricting parameters `only` and `except`.
|
126
|
+
|
127
|
+
```ruby
|
128
|
+
class EventsController < ApplicationController
|
129
|
+
|
130
|
+
require_login only: [:postpone]
|
131
|
+
load_and_authorize, except: [:postpone]
|
132
|
+
|
133
|
+
def index; end
|
134
|
+
|
135
|
+
def new; end
|
136
|
+
|
137
|
+
def create; end
|
138
|
+
|
139
|
+
def postpone; end
|
140
|
+
|
141
|
+
end
|
142
|
+
```
|
143
|
+
|
144
|
+
### Other methods
|
145
|
+
|
146
|
+
When an authorization exception is raised by the engine, it automatically store the current user's location in a cookie. The called method is `store_location` and is available in your controllers. Then you can use the method `redirect_back_or(default, message = nil)` which either redirects to the stored location if any or redirects the default provided path, with an optional message.
|
@@ -35,6 +35,11 @@ module Adeia
|
|
35
35
|
return controller_resource.load_records
|
36
36
|
end
|
37
37
|
|
38
|
+
def load_records(**args)
|
39
|
+
controller_resource = ControllerResource.new(self, **args)
|
40
|
+
return controller_resource.load_records
|
41
|
+
end
|
42
|
+
|
38
43
|
def authorize!(**args)
|
39
44
|
ControllerResource.new(self, **args).authorize!
|
40
45
|
end
|
@@ -55,7 +60,7 @@ module Adeia
|
|
55
60
|
end
|
56
61
|
|
57
62
|
# Redirect the user to the stored url or the default one provided
|
58
|
-
#
|
63
|
+
#
|
59
64
|
# * *Args* :
|
60
65
|
# - default path to redirect to
|
61
66
|
# * *Returns* :
|
@@ -66,9 +71,9 @@ module Adeia
|
|
66
71
|
end
|
67
72
|
|
68
73
|
# Store the current url in a cookie
|
69
|
-
#
|
74
|
+
#
|
70
75
|
# * *Args* :
|
71
|
-
#
|
76
|
+
#
|
72
77
|
# * *Returns* :
|
73
78
|
#
|
74
79
|
def store_location
|
@@ -77,4 +82,4 @@ module Adeia
|
|
77
82
|
|
78
83
|
end
|
79
84
|
|
80
|
-
end
|
85
|
+
end
|
data/lib/adeia/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adeia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- khcr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|