permits 0.3.0 → 1.0.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 +17 -0
- data/lib/permits/forms/invite_form.rb +65 -0
- data/lib/permits/forms/{new_invite.rb → new_invite_form.rb} +1 -1
- data/lib/permits/permission.rb +1 -1
- data/lib/permits/version.rb +1 -1
- data/lib/permits.rb +2 -1
- 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: 17d6289fc58da4116cf85b5cf7853ebfe67d6366a4e9c96b64b0d0d42533d1a4
|
4
|
+
data.tar.gz: '08f713827ae201b471163040ce273e2b7f5beb5e59f31c9af0d808e3d1248f7e'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45c24dc5c7c076e30644f57a9779d50d252551921fa3e7eb7de6d21fe588f5e5217c5f90638cf98bc570ec9daf75526f910f0f015bf4e72ec923e860f0ecb420
|
7
|
+
data.tar.gz: 4bec82908bb725ea9a36fac20d0d1ee091923509b2f3a52b2ce59649fb011a586e67e70c7d93e3ad1ce480f496432af84354787ea285753a75bc8eda67d3b8a3
|
data/README.md
CHANGED
@@ -76,6 +76,23 @@ CustomPolicy.authorize!(owner, resource, :some_action)
|
|
76
76
|
CustomPolicy.authorized?(owner, resource, :some_action)
|
77
77
|
```
|
78
78
|
|
79
|
+
### Invites
|
80
|
+
`Permits` provides a simple pre-permissioned Invite system, with a `Permits::Invite` model, a `Permits::Form::NewInviteForm` form object for creating new invites, and a `Permits::Form::InviteForm` form object for accepting, declining and revoking invites. Invites can be pre-assigned permissions, so that when the invite is accepted, the invitee is automatically granted the permissions.
|
81
|
+
|
82
|
+
```irb
|
83
|
+
group = Group.create(name: "Group 1")
|
84
|
+
group_user = User.create(name: "User 1")
|
85
|
+
user_permission = Permits::Permission.create(owner: group_user, resource: group, action: :super_user)
|
86
|
+
|
87
|
+
NewInviteForm.new(
|
88
|
+
invited_by: group_user,
|
89
|
+
email: "invitee@email-address.com",
|
90
|
+
permission_attributes: {
|
91
|
+
group => [:read, :edit]
|
92
|
+
}
|
93
|
+
).save!
|
94
|
+
```
|
95
|
+
|
79
96
|
## Installation
|
80
97
|
Add this line to your application's Gemfile:
|
81
98
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Permits
|
2
|
+
module Forms
|
3
|
+
class InviteForm
|
4
|
+
include ActiveModel::Model
|
5
|
+
include ActiveModel::Attributes
|
6
|
+
include ActiveModel::Validations
|
7
|
+
|
8
|
+
attribute :invite_id
|
9
|
+
attribute :invited
|
10
|
+
attribute :token
|
11
|
+
|
12
|
+
validates :invite_id, presence: true
|
13
|
+
validates :invited, presence: true
|
14
|
+
validates :token, presence: true
|
15
|
+
|
16
|
+
def accept
|
17
|
+
return false unless valid_invite?
|
18
|
+
|
19
|
+
ActiveRecord::Base.transaction do
|
20
|
+
invite.accept!
|
21
|
+
end
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def decline
|
26
|
+
return false unless valid_invite?
|
27
|
+
|
28
|
+
ActiveRecord::Base.transaction do
|
29
|
+
invite.decline!
|
30
|
+
end
|
31
|
+
true
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
ActiveRecord::Base.transaction do
|
36
|
+
invite.permissions.destroy_all
|
37
|
+
invite.destroy
|
38
|
+
end
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def valid_invite?
|
45
|
+
return false unless valid?
|
46
|
+
|
47
|
+
valid_email? && valid_token?
|
48
|
+
end
|
49
|
+
|
50
|
+
def valid_email?
|
51
|
+
raise I18n.t("errors.invited_does_not_respond_to_email") unless invited.respond_to?(:email)
|
52
|
+
|
53
|
+
invite.email == invited.email
|
54
|
+
end
|
55
|
+
|
56
|
+
def valid_token?
|
57
|
+
invite.slug == token
|
58
|
+
end
|
59
|
+
|
60
|
+
def invite
|
61
|
+
@invite ||= ::Permits::Invite.find(invite_id)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/permits/permission.rb
CHANGED
@@ -17,7 +17,7 @@ module Permits
|
|
17
17
|
def permits_is_permissable
|
18
18
|
return if Permits.config.permits&.include?(permits&.to_sym)
|
19
19
|
|
20
|
-
errors.add(:permits, "
|
20
|
+
errors.add(:permits, I18n.t("errors.invalid_permits_param", class: resource.class.name))
|
21
21
|
end
|
22
22
|
|
23
23
|
scope :permits_any, -> { all }
|
data/lib/permits/version.rb
CHANGED
data/lib/permits.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
require "active_support/configurable"
|
2
2
|
require "aasm"
|
3
3
|
require "permits/concerns/has_permissions"
|
4
|
-
require "permits/forms/
|
4
|
+
require "permits/forms/new_invite_form"
|
5
|
+
require "permits/forms/invite_form"
|
5
6
|
require "permits/invite"
|
6
7
|
require "permits/permission"
|
7
8
|
require "permits/policy/unauthorized_error"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: permits
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Gilchrist
|
@@ -152,7 +152,8 @@ files:
|
|
152
152
|
- lib/generators/permits/install/templates/create_permits_permissions.rb
|
153
153
|
- lib/permits.rb
|
154
154
|
- lib/permits/concerns/has_permissions.rb
|
155
|
-
- lib/permits/forms/
|
155
|
+
- lib/permits/forms/invite_form.rb
|
156
|
+
- lib/permits/forms/new_invite_form.rb
|
156
157
|
- lib/permits/invite.rb
|
157
158
|
- lib/permits/permission.rb
|
158
159
|
- lib/permits/policy/base.rb
|