authegy 0.0.2 → 0.0.3
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/CHANGELOG.md +9 -0
- data/README.md +75 -24
- data/lib/authegy/engine.rb +4 -0
- data/lib/authegy/models/user.rb +11 -2
- data/lib/authegy/rails/routes.rb +18 -0
- data/lib/authegy/version.rb +1 -1
- data/lib/generators/authegy/install_generator.rb +2 -6
- data/lib/generators/authegy/templates/models_migration.erb +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a7fdcc608fb168061d6b17fa23335ee534a0d0fa9b65cd542daf21a7c36b515
|
4
|
+
data.tar.gz: ed2ba96fd8a897153ab2c34879d00c231db2ca3b09dda6eb826505e24217d5ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 585350d7081f58a6122480eaff47e98f05ed233e3633e887d4b9c640c90bb917c913293e0d71301bb0575031abe1bb80441342beeab2f7fad7b5c8c295e8678e
|
7
|
+
data.tar.gz: c1e6c3bf0287abda69a78330755786a236f5ed06a70172d4212052713dacf4e0f0f810c7eb918796a307a46ea7d513b901db3fa3563fd7fa830503ad4971d23b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Authegy Changelog
|
2
2
|
|
3
|
+
## Version 0.0.3
|
4
|
+
|
5
|
+
- Fixed User Signup
|
6
|
+
- Use router method 'authegy_routes' instead of 'devise_for'
|
7
|
+
|
8
|
+
## Version 0.0.2
|
9
|
+
|
10
|
+
- Minor correction over the User model template
|
11
|
+
|
3
12
|
## Version 0.0.1
|
4
13
|
|
5
14
|
- Initial Implementation
|
data/README.md
CHANGED
@@ -1,43 +1,94 @@
|
|
1
1
|
# Authegy
|
2
2
|
|
3
|
-
The Authegy gem is a library that combines several
|
4
|
-
provide an opinionated authentication and role-based authorization
|
3
|
+
The Authegy gem is a library that combines several top-grade ruby libraries to
|
4
|
+
provide an opinionated authentication and role-based authorization solution for
|
5
5
|
your rails apps.
|
6
6
|
|
7
|
-
|
7
|
+
The following libraries are used as the base of Authegy:
|
8
|
+
- Devise
|
9
|
+
- Doorkeeper
|
10
|
+
|
11
|
+
These libraries are used following a particular set of rules:
|
12
|
+
|
13
|
+
- Only a single `User` class: whereas `devise` allows for multiple
|
14
|
+
"authenticatable" models, we're going use single class, to which we can assign
|
15
|
+
different roles instead.
|
16
|
+
- The "profile" user data - such as names, email, phone, etc. - is extracted
|
17
|
+
into a separate `Person` model. We actually can create `Person` records
|
18
|
+
without an associated user, enabling us to manage a "contact list".
|
19
|
+
- Roles added to a given person can be assigned either unlimited, or scoped to a
|
20
|
+
given "resource" object.
|
21
|
+
- The only way of giving access to an app's RESTAPI (where available) is through
|
22
|
+
an OAuth2 flow (i.e. access token, etc) - that's where Doorkeeper comes into
|
23
|
+
play. Given that our most common use case for RESTAPIs is to be consumed by
|
24
|
+
non-confidential apps (Single-page apps, mobile apps, etc), we're avoiding
|
25
|
+
other solutions such as Devise JWT, Devise Token Auth, etc.
|
26
|
+
- All OAuth2 (doorkeeper) apps will have an owner, and admin roles may be
|
27
|
+
given to other people to manage the apps.
|
28
|
+
- Restrictions coming from the OAuth2 access token permissions will be added to
|
29
|
+
those already in effect from roles for the token's resource owner.
|
30
|
+
|
31
|
+
## Getting started
|
8
32
|
|
9
33
|
Add this line to your application's Gemfile:
|
10
34
|
|
11
35
|
```ruby
|
12
|
-
gem 'authegy'
|
36
|
+
gem 'authegy', '~> 0.0.2'
|
13
37
|
```
|
14
38
|
|
15
|
-
|
39
|
+
Then run `bundle install`.
|
16
40
|
|
17
|
-
|
41
|
+
Next, you'll need to run the generator:
|
18
42
|
|
19
|
-
|
43
|
+
$ rails generate authegy:install
|
20
44
|
|
21
|
-
|
45
|
+
The install generator will run the install routines for the required libraries (
|
46
|
+
devise, etc), and will also generate the required models, database migration and
|
47
|
+
routes to start working with the authegy model.
|
22
48
|
|
23
|
-
|
49
|
+
### Model methods
|
24
50
|
|
25
|
-
|
51
|
+
There are several methods available to the `Person` and `User` models, and are
|
52
|
+
very similar to the methods found at other RBAC libraries:
|
26
53
|
|
27
|
-
|
28
|
-
of having multiple "user" classes, which tend to have duplicated code &
|
29
|
-
functionality between them.
|
30
|
-
- Roles can also be optionally associated to different "Resource" models, so we
|
31
|
-
can limit the authorization to certain objects. Examples:
|
32
|
-
- "User 2" is an "Administrator" of "Website 2" (so he/she can change the
|
33
|
-
Website 2's URL)
|
34
|
-
- "User 3" is a "Procurement Manager" of "Company 4" (so he/she can place
|
35
|
-
orders on behalf of the Company 4)
|
54
|
+
```ruby
|
36
55
|
|
37
|
-
|
56
|
+
# Create a person:
|
57
|
+
example_person = Person.create first_name: 'Example', last_name: 'Person', email: 'first@example.com'
|
58
|
+
|
59
|
+
# Assign a role to this person - The role will be created if it doesn't exist:
|
60
|
+
example_person.assign_role :administrator
|
61
|
+
|
62
|
+
# Assign a user to this person - he/she will now have the ability to sign-in:
|
63
|
+
example_user = example_person.create_user! password: '123456'
|
64
|
+
|
65
|
+
# You can assign roles scoped to a particular resource:
|
66
|
+
example_person.assign_role :moderator, Discussion.last
|
38
67
|
|
68
|
+
# You can test if the person has a role:
|
69
|
+
example_person.has_role? :moderator, Discussion.last
|
39
70
|
|
71
|
+
# All the role management methods are available to the `User` model via method
|
72
|
+
# delegation:
|
73
|
+
example_user.assign_role :moderator, Discussion.first
|
74
|
+
example_user.has_role? :moderator, Discussion.first
|
75
|
+
|
76
|
+
```
|
77
|
+
|
78
|
+
## The Authegy model, in detail
|
79
|
+
|
80
|
+

|
40
81
|
|
82
|
+
- We extracted the `User` fields not fundamental to the process of
|
83
|
+
authentication into the model `Person`. This allows us to also cover cases in
|
84
|
+
which we are asked to manage a "contact list", with people that either can
|
85
|
+
sign-in or not. Notice the `email` field is also moved to the `Person` model -
|
86
|
+
we provide the code required for Devise to look in the `people` table.
|
87
|
+
- The way we assign roles to a person is using the `RoleAssignment` model. This
|
88
|
+
model also allows us to optionally specify a `resource` to which the assigned
|
89
|
+
role will be limited (or scoped). Notice how the `RoleAssignment` is separated
|
90
|
+
from the actual `Role` model, achieving a higher level of database
|
91
|
+
normalization.
|
41
92
|
|
42
93
|
## Development
|
43
94
|
|
@@ -54,7 +105,7 @@ git commits and tags, and push the `.gem` file to
|
|
54
105
|
## Contributing
|
55
106
|
|
56
107
|
Bug reports and pull requests are welcome on GitHub at
|
57
|
-
https://github.com/vovimayhem/authegy. This project is intended to be a safe,
|
108
|
+
https://github.com/vovimayhem/authegy-gem. This project is intended to be a safe,
|
58
109
|
welcoming space for collaboration, and contributors are expected to adhere to
|
59
110
|
the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
60
111
|
|
@@ -65,6 +116,6 @@ The gem is available as open source under the terms of the
|
|
65
116
|
|
66
117
|
## Code of Conduct
|
67
118
|
|
68
|
-
Everyone interacting in the
|
69
|
-
and mailing lists is expected to follow the
|
70
|
-
[Code of Conduct](https://github.com/vovimayhem/authegy/blob/master/CODE_OF_CONDUCT.md).
|
119
|
+
Everyone interacting in the Authegy project’s codebases, issue trackers, chat
|
120
|
+
rooms and mailing lists is expected to follow the
|
121
|
+
[Code of Conduct](https://github.com/vovimayhem/authegy-gem/blob/master/CODE_OF_CONDUCT.md).
|
data/lib/authegy/engine.rb
CHANGED
data/lib/authegy/models/user.rb
CHANGED
@@ -15,8 +15,17 @@ module Authegy
|
|
15
15
|
devise :database_authenticatable_with_person_email,
|
16
16
|
:validatable_with_person_email
|
17
17
|
|
18
|
-
belongs_to :person,
|
19
|
-
|
18
|
+
belongs_to :person,
|
19
|
+
class_name: '::Person',
|
20
|
+
inverse_of: :user,
|
21
|
+
foreign_key: :id
|
22
|
+
|
23
|
+
delegate :email, :name, to: :person, allow_nil: true
|
24
|
+
|
25
|
+
def email=(value)
|
26
|
+
return person.email = value if person.present?
|
27
|
+
build_person(email: value).email
|
28
|
+
end
|
20
29
|
|
21
30
|
delegate :assigned_roles, :assign_role, :has_role?, :has_any_role?,
|
22
31
|
:remove_role, :role_assignments, to: :person
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module ActionDispatch
|
3
|
+
module Routing
|
4
|
+
class Mapper
|
5
|
+
def authegy_routes(options = {})
|
6
|
+
# Remove the keys that would interfere with the authegy way:
|
7
|
+
options.extract! :class_name, # We'll only use 'User'
|
8
|
+
:path, # All devise paths available from root
|
9
|
+
:singular # No 'resource name' required
|
10
|
+
|
11
|
+
default_path_names = { sign_in: 'sign-in', sign_out: 'sign-out' }
|
12
|
+
options.reverse_merge! path: '/', path_names: default_path_names
|
13
|
+
|
14
|
+
devise_for :users, options
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/authegy/version.rb
CHANGED
@@ -19,11 +19,7 @@ class InstallGenerator < Rails::Generators::Base
|
|
19
19
|
generate 'authegy:models People'
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
route
|
24
|
-
devise_for :users,
|
25
|
-
path: '/',
|
26
|
-
path_names: { sign_in: 'sign-in', sign_out: 'sign-out' }
|
27
|
-
STRING
|
22
|
+
def add_autegy_routes
|
23
|
+
route 'authegy_routes'
|
28
24
|
end
|
29
25
|
end
|
@@ -10,8 +10,8 @@ class CreateAuthegyModelTables < ActiveRecord::Migration<%= migration_version %>
|
|
10
10
|
|
11
11
|
def create_people_table
|
12
12
|
create_table :people do |t|
|
13
|
-
t.string :first_name
|
14
|
-
t.string :last_name
|
13
|
+
t.string :first_name
|
14
|
+
t.string :last_name
|
15
15
|
t.string :email, index: { unique: true }
|
16
16
|
|
17
17
|
# Feel free to add additional fields, such as 'nickname', etc:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: authegy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roberto Quintanilla
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -140,6 +140,7 @@ files:
|
|
140
140
|
- lib/authegy/models/role.rb
|
141
141
|
- lib/authegy/models/role_assignment.rb
|
142
142
|
- lib/authegy/models/user.rb
|
143
|
+
- lib/authegy/rails/routes.rb
|
143
144
|
- lib/authegy/version.rb
|
144
145
|
- lib/devise/models/database_authenticatable_with_person_email.rb
|
145
146
|
- lib/devise/models/validatable_with_person_email.rb
|