super_auth 0.1.3 → 0.1.5

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.
@@ -1,10 +1,24 @@
1
- class SuperAuth::Edge < Sequel::Model(:edges)
1
+ class SuperAuth::Edge < Sequel::Model(:super_auth_edges)
2
2
  many_to_one :user
3
3
  many_to_one :group
4
4
  many_to_one :permission
5
5
  many_to_one :role
6
6
  many_to_one :resource
7
7
 
8
+ def before_save
9
+ @affected_users = SuperAuth::Authorization.where(user_id: user_id).distinct.select_map(:user_id) + [user_id]
10
+ end
11
+
12
+ def after_save
13
+ SuperAuth::Authorization.db.transaction do
14
+ SuperAuth::Authorization.where(user_id: @affected_users).delete
15
+ SuperAuth::Authorization.multi_insert(
16
+ SuperAuth::Edge.authorizations.where(user_id: @affected_users)
17
+ .to_a
18
+ )
19
+ end
20
+ end
21
+
8
22
  class << self
9
23
 
10
24
  def authorizations
@@ -12,91 +26,92 @@ class SuperAuth::Edge < Sequel::Model(:edges)
12
26
  .union(users_roles_permissions_resources)
13
27
  .union(users_groups_permissions_resources)
14
28
  .union(users_permissions_resources)
29
+ .union(users_resources)
15
30
  end
16
31
 
17
32
  def users_groups_roles_permissions_resources
18
- users_groups_roles_ds = SuperAuth::User.join(:edges, user_id: :id).select_all(:users).join(SuperAuth::Group.from(SuperAuth::Group.trees).as(:groups), id: :group_id).select(
19
- Sequel[:users][:id].as(:user_id),
20
- Sequel[:users][:name].as(:user_name),
21
- Sequel[:users][:external_id].as(:user_external_id),
22
- Sequel[:users][:created_at].as(:user_created_at),
23
- Sequel[:users][:updated_at].as(:user_updated_at),
33
+ users_groups_roles_ds = SuperAuth::User.join(:super_auth_edges, user_id: :id).select_all(:super_auth_users).join(SuperAuth::Group.from(SuperAuth::Group.trees).as(:groups), id: :group_id).select(
34
+ Sequel[:super_auth_users][:id].as(:user_id),
35
+ Sequel[:super_auth_users][:name].as(:user_name),
36
+ Sequel[:super_auth_users][:external_id].as(:user_external_id),
37
+ Sequel[:super_auth_users][:created_at].as(:user_created_at),
38
+ Sequel[:super_auth_users][:updated_at].as(:user_updated_at),
24
39
  Sequel[:groups][:id].as(:group_id),
25
40
  Sequel[:groups][:name].as(:group_name),
26
- Sequel[:edges][:id].as(:edge_id),
27
- Sequel[:edges][:permission_id].as(:edge_permission_id),
28
- Sequel[:edges][:group_id].as(:edge_group_id),
29
- Sequel[:edges][:user_id].as(:edge_user_id),
30
- Sequel[:edges][:role_id].as(:edge_role_id),
41
+ Sequel[:super_auth_edges][:id].as(:edge_id),
42
+ Sequel[:super_auth_edges][:permission_id].as(:edge_permission_id),
43
+ Sequel[:super_auth_edges][:group_id].as(:edge_group_id),
44
+ Sequel[:super_auth_edges][:user_id].as(:edge_user_id),
45
+ Sequel[:super_auth_edges][:role_id].as(:edge_role_id),
31
46
  Sequel[:groups][:group_path],
32
47
  Sequel[:groups][:group_name_path],
33
48
  Sequel[:groups][:parent_id],
34
- Sequel[:groups][:created_at].as(:group_created_at),
35
- Sequel[:groups][:updated_at].as(:group_updated_at),
36
- ).join(Sequel[:edges].as(:group_role_edges), Sequel[:group_role_edges][:group_id] => Sequel[:groups][:id]).select_append(
49
+ Sequel[:groups][:created_at].cast(:text).as(:group_created_at),
50
+ Sequel[:groups][:updated_at].cast(:text).as(:group_updated_at),
51
+ ).join(Sequel[:super_auth_edges].as(:group_role_edges), Sequel[:group_role_edges][:group_id] => Sequel[:groups][:id]).select_append(
37
52
  Sequel[:group_role_edges][:id].as(:group_role_edge_id),
38
53
  Sequel[:group_role_edges][:permission_id].as(:group_role_edge_permission_id),
39
54
  Sequel[:group_role_edges][:group_id].as(:group_role_edge_group_id),
40
55
  Sequel[:group_role_edges][:user_id].as(:group_role_edge_user_id),
41
56
  Sequel[:group_role_edges][:role_id].as(:group_role_edge_role_id),
42
- ).join(:roles, id: Sequel[:group_role_edges][:role_id])
57
+ ).join(:super_auth_roles, id: Sequel[:group_role_edges][:role_id])
43
58
 
44
59
  SuperAuth::Edge.from(
45
60
  SuperAuth::Edge.from(
46
- SuperAuth::Group.cte(SuperAuth::Group.where(id: users_groups_roles_ds.select(Sequel[:groups][:id])).select(:id)).select { [id.as(:group_id), name.as(:group_name), parent_id.as(:group_parent_id), group_path, group_name_path, created_at.as(:group_created_at), updated_at.as(:group_updated_at)] },
61
+ SuperAuth::Group.cte(SuperAuth::Group.where(id: users_groups_roles_ds.select(Sequel[:groups][:id])).select(:id)).select { [id.as(:group_id), name.as(:group_name), parent_id.as(:group_parent_id), group_path, group_name_path, created_at.cast(:text).as(:group_created_at), updated_at.as(:group_updated_at)] },
47
62
  SuperAuth::Role.cte(users_groups_roles_ds.select(Sequel[:group_role_edges][:role_id])).select { [id.as(:role_id), name.as(:role_name), parent_id.as(:role_parent_id), role_path, role_name_path, created_at.as(:role_created_at), updated_at.as(:role_updated_at) ] }
48
63
  ).as(:users_groups_roles_permissions_resources)
49
- ).join(Sequel[:edges].as(:user_edges), Sequel[:user_edges][:group_id] => Sequel[:users_groups_roles_permissions_resources][:group_id])
50
- .join(Sequel[:users], id: Sequel[:user_edges][:user_id])
64
+ ).join(Sequel[:super_auth_edges].as(:user_edges), Sequel[:user_edges][:group_id] => Sequel[:users_groups_roles_permissions_resources][:group_id])
65
+ .join(Sequel[:super_auth_users], id: Sequel[:user_edges][:user_id])
51
66
  .select(
52
- Sequel[:users][:id].as(:user_id),
53
- Sequel[:users][:name].as(:user_name),
54
- Sequel[:users][:external_id].as(:user_external_id),
55
- Sequel[:users][:created_at].cast(:text).as(:user_created_at),
56
- Sequel[:users][:updated_at].cast(:text).as(:user_updated_at),
67
+ Sequel[:super_auth_users][:id].as(:user_id),
68
+ Sequel[:super_auth_users][:name].as(:user_name),
69
+ Sequel[:super_auth_users][:external_id].as(:user_external_id),
70
+ Sequel[:super_auth_users][:created_at].cast(:text).as(:user_created_at),
71
+ Sequel[:super_auth_users][:updated_at].cast(:text).as(:user_updated_at),
57
72
 
58
73
  Sequel[:users_groups_roles_permissions_resources][:group_id],
59
74
  Sequel[:users_groups_roles_permissions_resources][:group_name],
60
75
  Sequel[:users_groups_roles_permissions_resources][:group_path],
61
76
  Sequel[:users_groups_roles_permissions_resources][:group_name_path],
62
77
  Sequel[:users_groups_roles_permissions_resources][:group_parent_id],
63
- Sequel[:users_groups_roles_permissions_resources][:group_created_at].cast(:text),
64
- Sequel[:users_groups_roles_permissions_resources][:group_updated_at].cast(:text),
78
+ Sequel[:users_groups_roles_permissions_resources][:group_created_at].cast(:text).as(:group_created_at),
79
+ Sequel[:users_groups_roles_permissions_resources][:group_updated_at].cast(:text).as(:group_updated_at),
65
80
 
66
81
  Sequel[:users_groups_roles_permissions_resources][:role_id],
67
82
  Sequel[:users_groups_roles_permissions_resources][:role_name],
68
83
  Sequel[:users_groups_roles_permissions_resources][:role_path],
69
84
  Sequel[:users_groups_roles_permissions_resources][:role_name_path],
70
85
  Sequel[:users_groups_roles_permissions_resources][:role_parent_id],
71
- Sequel[:users_groups_roles_permissions_resources][:role_created_at].cast(:text),
72
- Sequel[:users_groups_roles_permissions_resources][:role_updated_at].cast(:text),
86
+ Sequel[:users_groups_roles_permissions_resources][:role_created_at].cast(:text).as(:role_created_at),
87
+ Sequel[:users_groups_roles_permissions_resources][:role_updated_at].cast(:text).as(:role_updated_at),
73
88
 
74
- Sequel[:permissions][:id].as(:permission_id),
75
- Sequel[:permissions][:name].as(:permission_name),
76
- Sequel[:permissions][:created_at].cast(:text).as(:permission_created_at),
77
- Sequel[:permissions][:updated_at].cast(:text).as(:permission_updated_at),
89
+ Sequel[:super_auth_permissions][:id].as(:permission_id),
90
+ Sequel[:super_auth_permissions][:name].as(:permission_name),
91
+ Sequel[:super_auth_permissions][:created_at].cast(:text).as(:permission_created_at),
92
+ Sequel[:super_auth_permissions][:updated_at].cast(:text).as(:permission_updated_at),
78
93
 
79
- Sequel[:resources][:id].as(:resource_id),
80
- Sequel[:resources][:name].as(:resource_name),
81
- Sequel[:resources][:external_id].as(:resource_external_id)
94
+ Sequel[:super_auth_resources][:id].as(:resource_id),
95
+ Sequel[:super_auth_resources][:name].as(:resource_name),
96
+ Sequel[:super_auth_resources][:external_id].as(:resource_external_id)
82
97
  )
83
- .join(Sequel[:edges].as(:permission_edges), Sequel[:permission_edges][:role_id] => Sequel[:users_groups_roles_permissions_resources][:role_id])
84
- .join(Sequel[:permissions], id: Sequel[:permission_edges][:permission_id])
85
- .join(Sequel[:edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:permission_edges][:permission_id])
86
- .join(Sequel[:resources], id: Sequel[:resource_edges][:resource_id])
98
+ .join(Sequel[:super_auth_edges].as(:permission_edges), Sequel[:permission_edges][:role_id] => Sequel[:users_groups_roles_permissions_resources][:role_id])
99
+ .join(Sequel[:super_auth_permissions], id: Sequel[:permission_edges][:permission_id])
100
+ .join(Sequel[:super_auth_edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:permission_edges][:permission_id])
101
+ .join(Sequel[:super_auth_resources], id: Sequel[:resource_edges][:resource_id])
87
102
  .distinct
88
103
  end
89
104
 
90
105
  def users_groups_permissions_resources
91
106
  SuperAuth::User.
92
- join(Sequel[:edges].as(:user_edges), user_id: :id).
107
+ join(Sequel[:super_auth_edges].as(:user_edges), user_id: :id).
93
108
  join(SuperAuth::Group.from(SuperAuth::Group.trees).as(:groups), id: :group_id).
94
109
  select(
95
- Sequel[:users][:id].as(:user_id),
96
- Sequel[:users][:name].as(:user_name),
97
- Sequel[:users][:external_id].as(:user_external_id),
98
- Sequel[:users][:created_at].cast(:text).as(:user_created_at),
99
- Sequel[:users][:updated_at].cast(:text).as(:user_updated_at),
110
+ Sequel[:super_auth_users][:id].as(:user_id),
111
+ Sequel[:super_auth_users][:name].as(:user_name),
112
+ Sequel[:super_auth_users][:external_id].as(:user_external_id),
113
+ Sequel[:super_auth_users][:created_at].cast(:text).as(:user_created_at),
114
+ Sequel[:super_auth_users][:updated_at].cast(:text).as(:user_updated_at),
100
115
 
101
116
  Sequel[:groups][:id].as(:group_id),
102
117
  Sequel[:groups][:name].as(:group_name),
@@ -114,40 +129,40 @@ class SuperAuth::Edge < Sequel::Model(:edges)
114
129
  Sequel::NULL.as(:role_created_at), # Sequel[:roles][:created_at].as(:role_created_at),
115
130
  Sequel::NULL.as(:role_updated_at), # Sequel[:roles][:updated_at].as(:role_updated_at),
116
131
 
117
- Sequel[:permissions][:id].as(:permission_id),
118
- Sequel[:permissions][:name].as(:permission_name),
119
- Sequel[:permissions][:created_at].cast(:text).as(:permission_created_at),
120
- Sequel[:permissions][:updated_at].cast(:text).as(:permission_updated_at),
132
+ Sequel[:super_auth_permissions][:id].as(:permission_id),
133
+ Sequel[:super_auth_permissions][:name].as(:permission_name),
134
+ Sequel[:super_auth_permissions][:created_at].cast(:text).as(:permission_created_at),
135
+ Sequel[:super_auth_permissions][:updated_at].cast(:text).as(:permission_updated_at),
121
136
 
122
- Sequel[:resources][:id].as(:resource_id),
123
- Sequel[:resources][:name].as(:resource_name),
124
- Sequel[:resources][:external_id].as(:resource_external_id),
137
+ Sequel[:super_auth_resources][:id].as(:resource_id),
138
+ Sequel[:super_auth_resources][:name].as(:resource_name),
139
+ Sequel[:super_auth_resources][:external_id].as(:resource_external_id),
125
140
  ).
126
- join(Sequel[:edges].as(:permission_edges), Sequel[:permission_edges][:group_id] => Sequel[:groups][:id]).
127
- join(Sequel[:permissions], id: Sequel[:permission_edges][:permission_id]).
128
- join(Sequel[:edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:permissions][:id]).
129
- join(Sequel[:resources], id: Sequel[:resource_edges][:resource_id]).
141
+ join(Sequel[:super_auth_edges].as(:permission_edges), Sequel[:permission_edges][:group_id] => Sequel[:groups][:id]).
142
+ join(Sequel[:super_auth_permissions], id: Sequel[:permission_edges][:permission_id]).
143
+ join(Sequel[:super_auth_edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:super_auth_permissions][:id]).
144
+ join(Sequel[:super_auth_resources], id: Sequel[:resource_edges][:resource_id]).
130
145
  distinct
131
146
  end
132
147
 
133
148
  def users_roles_permissions_resources
134
149
  SuperAuth::User.
135
- join(Sequel[:edges].as(:user_edges), user_id: :id).
150
+ join(Sequel[:super_auth_edges].as(:user_edges), user_id: :id).
136
151
  join(SuperAuth::Role.from(SuperAuth::Role.trees).as(:roles), id: :role_id).
137
152
  select(
138
- Sequel[:users][:id].as(:user_id),
139
- Sequel[:users][:name].as(:user_name),
140
- Sequel[:users][:external_id].as(:user_external_id),
141
- Sequel[:users][:created_at].cast(:text).as(:user_created_at),
142
- Sequel[:users][:updated_at].cast(:text).as(:user_updated_at),
143
-
144
- Sequel.lit(%Q[0 as "group_id"]), # Sequel[:groups][:group_id],
145
- Sequel::NULL.as(:group_name), # Sequel[:groups][:group_name],
146
- Sequel::NULL.as(:group_path), # Sequel[:groups][:group_path],
147
- Sequel::NULL.as(:group_name_path), # Sequel[:groups][:group_name_path],
148
- Sequel.lit(%Q[0 as "group_parent_id"]), # Sequel[:groups][:group_parent_id],
149
- Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "group_created_at"]), # Sequel[:groups][:group_created_at],
150
- Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "group_updated_at"]), # Sequel[:groups][:group_updated_at],
153
+ Sequel[:super_auth_users][:id].as(:user_id),
154
+ Sequel[:super_auth_users][:name].as(:user_name),
155
+ Sequel[:super_auth_users][:external_id].as(:user_external_id),
156
+ Sequel[:super_auth_users][:created_at].cast(:text).as(:user_created_at),
157
+ Sequel[:super_auth_users][:updated_at].cast(:text).as(:user_updated_at),
158
+
159
+ Sequel.lit(%Q[0 as "group_id"]), # Sequel[:super_auth_groups][:group_id],
160
+ Sequel::NULL.as(:group_name), # Sequel[:super_auth_groups][:group_name],
161
+ Sequel::NULL.as(:group_path), # Sequel[:super_auth_groups][:group_path],
162
+ Sequel::NULL.as(:group_name_path), # Sequel[:super_auth_groups][:group_name_path],
163
+ Sequel.lit(%Q[0 as "group_parent_id"]), # Sequel[:super_auth_groups][:group_parent_id],
164
+ Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "group_created_at"]), # Sequel[:super_auth_groups][:group_created_at],
165
+ Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "group_updated_at"]), # Sequel[:super_auth_groups][:group_updated_at],
151
166
 
152
167
  Sequel[:roles][:id].as(:role_id),
153
168
  Sequel[:roles][:name].as(:role_name),
@@ -157,31 +172,73 @@ class SuperAuth::Edge < Sequel::Model(:edges)
157
172
  Sequel[:roles][:created_at].cast(:text).as(:role_created_at),
158
173
  Sequel[:roles][:updated_at].cast(:text).as(:role_updated_at),
159
174
 
160
- Sequel[:permissions][:id].as(:permission_id),
161
- Sequel[:permissions][:name].as(:permission_name),
162
- Sequel[:permissions][:created_at].cast(:text).as(:permission_created_at),
163
- Sequel[:permissions][:updated_at].cast(:text).as(:permission_updated_at),
175
+ Sequel[:super_auth_permissions][:id].as(:permission_id),
176
+ Sequel[:super_auth_permissions][:name].as(:permission_name),
177
+ Sequel[:super_auth_permissions][:created_at].cast(:text).as(:permission_created_at),
178
+ Sequel[:super_auth_permissions][:updated_at].cast(:text).as(:permission_updated_at),
164
179
 
165
- Sequel[:resources][:id].as(:resource_id),
166
- Sequel[:resources][:name].as(:resource_name),
167
- Sequel[:resources][:external_id].as(:resource_external_id),
180
+ Sequel[:super_auth_resources][:id].as(:resource_id),
181
+ Sequel[:super_auth_resources][:name].as(:resource_name),
182
+ Sequel[:super_auth_resources][:external_id].as(:resource_external_id),
168
183
  ).
169
- join(Sequel[:edges].as(:permission_edges), Sequel[:permission_edges][:role_id] => Sequel[:roles][:id]).
170
- join(Sequel[:permissions], id: Sequel[:permission_edges][:permission_id]).
171
- join(Sequel[:edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:permissions][:id]).
172
- join(Sequel[:resources], id: Sequel[:resource_edges][:resource_id]).
184
+ join(Sequel[:super_auth_edges].as(:permission_edges), Sequel[:permission_edges][:role_id] => Sequel[:roles][:id]).
185
+ join(Sequel[:super_auth_permissions], id: Sequel[:permission_edges][:permission_id]).
186
+ join(Sequel[:super_auth_edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:super_auth_permissions][:id]).
187
+ join(Sequel[:super_auth_resources], id: Sequel[:resource_edges][:resource_id]).
173
188
  distinct
174
189
  end
175
190
 
176
191
  def users_permissions_resources
177
192
  SuperAuth::User.
178
- join(Sequel[:edges].as(:user_edges), user_id: :id).
193
+ join(Sequel[:super_auth_edges].as(:user_edges), user_id: :id).
194
+ select(
195
+ Sequel[:super_auth_users][:id].as(:user_id),
196
+ Sequel[:super_auth_users][:name].as(:user_name),
197
+ Sequel[:super_auth_users][:external_id].as(:user_external_id),
198
+ Sequel[:super_auth_users][:created_at].cast(:text).as(:user_created_at),
199
+ Sequel[:super_auth_users][:updated_at].cast(:text).as(:user_updated_at),
200
+
201
+ Sequel.lit(%Q[0 as "group_id"]), # Sequel[:groups][:group_id],
202
+ Sequel::NULL.as(:group_name), # Sequel[:groups][:group_name],
203
+ Sequel::NULL.as(:group_path), # Sequel[:groups][:group_path],
204
+ Sequel::NULL.as(:group_name_path), # Sequel[:groups][:group_name_path],
205
+ Sequel.lit(%Q[0 as "group_parent_id"]), # Sequel[:groups][:group_id],
206
+ Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "group_created_at"]), # Sequel[:groups][:group_created_at],
207
+ Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "group_updated_at"]), # Sequel[:groups][:group_updated_at],
208
+
209
+ Sequel.lit(%Q[0 as "role_id"]), # Sequel[:roles][:role_id],
210
+ Sequel::NULL.as(:role_name), # Sequel[:roles][:role_name],
211
+ Sequel::NULL.as(:role_path), # Sequel[:roles][:role_path],
212
+ Sequel::NULL.as(:role_name_path), # Sequel[:roles][:role_name_path],
213
+ Sequel.lit(%Q[0 as "role_parent_id"]), # Sequel[:roles][:role_parent_id],
214
+ Sequel::NULL.as(:role_created_at), # Sequel[:roles][:role_created_at],
215
+ Sequel::NULL.as(:role_updated_at), # Sequel[:roles][:role_updated_at],
216
+
217
+ Sequel[:super_auth_permissions][:id].as(:permission_id),
218
+ Sequel[:super_auth_permissions][:name].as(:permission_name),
219
+ Sequel[:super_auth_permissions][:created_at].cast(:text).as(:permission_created_at),
220
+ Sequel[:super_auth_permissions][:updated_at].cast(:text).as(:permission_updated_at),
221
+
222
+ Sequel[:super_auth_resources][:id].as(:resource_id),
223
+ Sequel[:super_auth_resources][:name].as(:resource_name),
224
+ Sequel[:super_auth_resources][:external_id].as(:resource_external_id)
225
+ ).
226
+ join(Sequel[:super_auth_edges].as(:permission_edges), Sequel[:permission_edges][:user_id] => Sequel[:super_auth_users][:id]).
227
+ join(Sequel[:super_auth_permissions], id: Sequel[:permission_edges][:permission_id]).
228
+ join(Sequel[:super_auth_edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:super_auth_permissions][:id]).
229
+ join(Sequel[:super_auth_resources], id: Sequel[:resource_edges][:resource_id]).
230
+ distinct
231
+ end
232
+
233
+ def users_resources
234
+ SuperAuth::User.
235
+ join(Sequel[:super_auth_edges].as(:user_edges), user_id: :id).
179
236
  select(
180
- Sequel[:users][:id].as(:user_id),
181
- Sequel[:users][:name].as(:user_name),
182
- Sequel[:users][:external_id].as(:user_external_id),
183
- Sequel[:users][:created_at].cast(:text).as(:user_created_at),
184
- Sequel[:users][:updated_at].cast(:text).as(:user_updated_at),
237
+ Sequel[:super_auth_users][:id].as(:user_id),
238
+ Sequel[:super_auth_users][:name].as(:user_name),
239
+ Sequel[:super_auth_users][:external_id].as(:user_external_id),
240
+ Sequel[:super_auth_users][:created_at].cast(:text).as(:user_created_at),
241
+ Sequel[:super_auth_users][:updated_at].cast(:text).as(:user_updated_at),
185
242
 
186
243
  Sequel.lit(%Q[0 as "group_id"]), # Sequel[:groups][:group_id],
187
244
  Sequel::NULL.as(:group_name), # Sequel[:groups][:group_name],
@@ -200,20 +257,17 @@ class SuperAuth::Edge < Sequel::Model(:edges)
200
257
  Sequel::NULL.as(:role_created_at), # Sequel[:roles][:role_created_at],
201
258
  Sequel::NULL.as(:role_updated_at), # Sequel[:roles][:role_updated_at],
202
259
 
203
- Sequel[:permissions][:id].as(:permission_id),
204
- Sequel[:permissions][:name].as(:permission_name),
205
- Sequel[:permissions][:created_at].cast(:text).as(:permission_created_at),
206
- Sequel[:permissions][:updated_at].cast(:text).as(:permission_updated_at),
260
+ Sequel.lit(%Q[0 as "permission_id"]),
261
+ Sequel::NULL.as(:permission_name),
262
+ Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "permission_created_at"]),
263
+ Sequel.lit(%Q['1970-01-01 00:00:00.000000-00' as "permission_updated_at"]),
207
264
 
208
- Sequel[:resources][:id].as(:resource_id),
209
- Sequel[:resources][:name].as(:resource_name),
210
- Sequel[:resources][:external_id].as(:resource_external_id)
265
+ Sequel[:super_auth_resources][:id].as(:resource_id),
266
+ Sequel[:super_auth_resources][:name].as(:resource_name),
267
+ Sequel[:super_auth_resources][:external_id].as(:resource_external_id)
211
268
  ).
212
- join(Sequel[:edges].as(:permission_edges), Sequel[:permission_edges][:user_id] => Sequel[:users][:id]).
213
- join(Sequel[:permissions], id: Sequel[:permission_edges][:permission_id]).
214
- join(Sequel[:edges].as(:resource_edges), Sequel[:resource_edges][:permission_id] => Sequel[:permissions][:id]).
215
- join(Sequel[:resources], id: Sequel[:resource_edges][:resource_id]).
269
+ join(Sequel[:super_auth_resources], Sequel[:user_edges][:resource_id] => Sequel[:super_auth_resources][:id]).
216
270
  distinct
217
271
  end
218
272
  end
219
- end
273
+ end
@@ -1,3 +1,3 @@
1
- class SuperAuth::Group < Sequel::Model(:groups)
1
+ class SuperAuth::Group < Sequel::Model(:super_auth_groups)
2
2
  include SuperAuth::Nestable
3
3
  end
@@ -110,7 +110,7 @@ module SuperAuth::Nestable
110
110
  end
111
111
 
112
112
  def pluralize(base = self)
113
- "#{demodularize(base).downcase}s".to_sym
113
+ "super_auth_#{demodularize(base).downcase}s".to_sym
114
114
  end
115
115
 
116
116
  def singularize(base = self)
@@ -118,7 +118,7 @@ module SuperAuth::Nestable
118
118
  end
119
119
 
120
120
  def cte_name(base = self)
121
- "#{pluralize(base)}_cte".to_sym
121
+ "super_auth_#{pluralize(base)}_cte".to_sym
122
122
  end
123
123
 
124
124
  def base_path(base = self)
@@ -1,23 +1,23 @@
1
- class SuperAuth::Permission < Sequel::Model(:permissions)
1
+ class SuperAuth::Permission < Sequel::Model(:super_auth_permissions)
2
2
  one_to_many :edges
3
3
 
4
4
  dataset_module do
5
5
  def with_edges
6
- join(:edges, permission_id: :id).select_all(:permissions)
6
+ join(:super_auth_edges, permission_id: :id).select_all(:super_auth_permissions)
7
7
  end
8
8
 
9
9
  def with_roles
10
- with_edges.join(Role.from(Role.trees).as(:roles), id: :role_id).select(
11
- Sequel[:permissions][:id].as(:id),
12
- Sequel[:permissions][:id].as(:permission_id),
10
+ with_edges.join(SuperAuth::Role.from(SuperAuth::Role.trees).as(:roles), id: :role_id).select(
11
+ Sequel[:super_auth_permissions][:id].as(:id),
12
+ Sequel[:super_auth_permissions][:id].as(:permission_id),
13
13
  Sequel[:roles][:id].as(:role_id),
14
- Sequel[:permissions][:name].as(:permission_name),
14
+ Sequel[:super_auth_permissions][:name].as(:permission_name),
15
15
  Sequel[:roles][:name].as(:role_name),
16
- Sequel[:edges][:id].as(:edge_id),
17
- Sequel[:edges][:permission_id].as(:edge_permission_id),
18
- Sequel[:edges][:group_id].as(:edge_group_id),
19
- Sequel[:edges][:user_id].as(:edge_user_id),
20
- Sequel[:edges][:role_id].as(:edge_role_id),
16
+ Sequel[:super_auth_edges][:id].as(:edge_id),
17
+ Sequel[:super_auth_edges][:permission_id].as(:edge_permission_id),
18
+ Sequel[:super_auth_edges][:group_id].as(:edge_group_id),
19
+ Sequel[:super_auth_edges][:user_id].as(:edge_user_id),
20
+ Sequel[:super_auth_edges][:role_id].as(:edge_role_id),
21
21
  :role_path,
22
22
  :role_name_path,
23
23
  :parent_id
@@ -0,0 +1,41 @@
1
+ module SuperAuth
2
+ if defined? Rails::Railtie
3
+ class Railtie < Rails::Railtie
4
+ rake_tasks do
5
+ load "tasks/super_auth_tasks.rake"
6
+ end
7
+
8
+ initializer "super_auth.initialize" do
9
+ if defined?(Sequel) && Sequel.const_defined?("Model")
10
+ require 'super_auth/authorization'
11
+ require 'super_auth/edge'
12
+ require 'super_auth/nestable'
13
+ require 'super_auth/group'
14
+ require 'super_auth/permission'
15
+ require 'super_auth/resource'
16
+ require 'super_auth/role'
17
+ require 'super_auth/user'
18
+ elsif defined?(ActiveRecord)
19
+ require 'super_auth/active_record'
20
+ require 'super_auth/active_record/authorization'
21
+ require 'super_auth/active_record/edge'
22
+ require 'super_auth/active_record/group'
23
+ require 'super_auth/active_record/permission'
24
+ require 'super_auth/active_record/resource'
25
+ require 'super_auth/active_record/role'
26
+ require 'super_auth/active_record/user'
27
+ SuperAuth::Authorization = SuperAuth::ActiveRecord::Authorization
28
+ SuperAuth::Edge = SuperAuth::ActiveRecord::Edge
29
+ SuperAuth::Group = SuperAuth::ActiveRecord::Group
30
+ SuperAuth::Permission = SuperAuth::ActiveRecord::Permission
31
+ SuperAuth::Resource = SuperAuth::ActiveRecord::Resource
32
+ SuperAuth::User = SuperAuth::ActiveRecord::User
33
+ SuperAuth::Role = SuperAuth::ActiveRecord::Role
34
+ end
35
+ end
36
+ end
37
+ else
38
+ class Railtie
39
+ end
40
+ end
41
+ end
@@ -1,2 +1,2 @@
1
- class SuperAuth::Resource < Sequel::Model(:resources)
1
+ class SuperAuth::Resource < Sequel::Model(:super_auth_resources)
2
2
  end
@@ -1,3 +1,3 @@
1
- class SuperAuth::Role < Sequel::Model(:roles)
1
+ class SuperAuth::Role < Sequel::Model(:super_auth_roles)
2
2
  include SuperAuth::Nestable
3
3
  end
@@ -1,23 +1,27 @@
1
- class SuperAuth::User < Sequel::Model(:users)
1
+ class SuperAuth::User < Sequel::Model(:super_auth_users)
2
2
  one_to_many :edges
3
+ one_to_many :resources
4
+
5
+ def system? = self.class.system == self
6
+ def self.system = find_or_create(name: "system")
3
7
 
4
8
  dataset_module do
5
9
  def with_edges
6
- join(:edges, user_id: :id).select_all(:users)
10
+ join(:super_auth_edges, user_id: :id).select_all(:super_auth_users)
7
11
  end
8
12
 
9
13
  def with_groups
10
- with_edges.join(Group.from(Group.trees).as(:groups), id: :group_id).select(
11
- Sequel[:users][:id].as(:id),
12
- Sequel[:users][:id].as(:user_id),
14
+ with_edges.join(SuperAuth::Group.from(SuperAuth::Group.trees).as(:groups), id: :group_id).select(
15
+ Sequel[:super_auth_users][:id].as(:id),
16
+ Sequel[:super_auth_users][:id].as(:user_id),
13
17
  Sequel[:groups][:id].as(:group_id),
14
- Sequel[:users][:name].as(:user_name),
18
+ Sequel[:super_auth_users][:name].as(:user_name),
15
19
  Sequel[:groups][:name].as(:group_name),
16
- Sequel[:edges][:id].as(:edge_id),
17
- Sequel[:edges][:permission_id].as(:edge_permission_id),
18
- Sequel[:edges][:group_id].as(:edge_group_id),
19
- Sequel[:edges][:user_id].as(:edge_user_id),
20
- Sequel[:edges][:role_id].as(:edge_role_id),
20
+ Sequel[:super_auth_edges][:id].as(:edge_id),
21
+ Sequel[:super_auth_edges][:permission_id].as(:edge_permission_id),
22
+ Sequel[:super_auth_edges][:group_id].as(:edge_group_id),
23
+ Sequel[:super_auth_edges][:user_id].as(:edge_user_id),
24
+ Sequel[:super_auth_edges][:role_id].as(:edge_role_id),
21
25
  Sequel[:groups][:group_path],
22
26
  Sequel[:groups][:group_name_path],
23
27
  Sequel[:groups][:parent_id]
@@ -25,7 +29,7 @@ class SuperAuth::User < Sequel::Model(:users)
25
29
  end
26
30
 
27
31
  def with_roles
28
- with_edges.join(Role.from(Role.trees).as(:roles), id: :role_id).select(
32
+ with_edges.join(SuperAuth::Role.from(SuperAuth::Role.trees).as(:roles), id: :role_id).select(
29
33
  Sequel[:users][:id].as(:id),
30
34
  Sequel[:users][:id].as(:user_id),
31
35
  Sequel[:roles][:id].as(:role_id),
@@ -41,9 +45,5 @@ class SuperAuth::User < Sequel::Model(:users)
41
45
  Sequel[:roles][:parent_id]
42
46
  )
43
47
  end
44
-
45
- def with_roles_with_groups
46
- with_groups_with_roles
47
- end
48
48
  end
49
49
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SuperAuth
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.5"
5
5
  end
data/lib/super_auth.rb CHANGED
@@ -8,30 +8,76 @@ if defined? SuperAuth::AUTOLOADERS
8
8
  loader.ignore("#{__dir__}/basic_loader.rb")
9
9
  loader.setup
10
10
  end
11
+ require "sequel"
12
+ else
13
+ require 'basic_loader'
11
14
  end
12
15
 
13
- require 'sequel'
16
+ module SuperAuth
17
+ class Error < StandardError; end
14
18
 
15
- ENV["SUPER_AUTH_LOG_LEVEL"] = 'debug'
16
- logger = if ENV["SUPER_AUTH_LOG_LEVEL"] == "debug"
17
- require 'logger'
18
- Logger.new(STDOUT)
19
- end
19
+ def self.setup
20
+ yield self if block_given?
21
+ end
20
22
 
21
- require 'sequel'
22
- Sequel::Model.plugin :timestamps, update_on_create: true
23
- if !ENV['SUPER_AUTH_DATABASE_URL'].nil? && !ENV['SUPER_AUTH_DATABASE_URL'].empty?
24
- Sequel::Model.db = Sequel.connect(ENV['SUPER_AUTH_DATABASE_URL'], logger: logger)
25
- else
26
- puts "Warning: SUPER_AUTH_DATABASE_URL not set, using in memory database"
27
- Sequel::Model.db = Sequel.sqlite(logger: logger)
28
- Sequel.extension :migration
29
- Sequel::Migrator.run(Sequel::Model.db, "db/migrate")
30
- end
31
- Sequel::Model.default_association_options = {:class_namespace=>'SuperAuth'}
23
+ def self.set_db
24
+ logger =
25
+ if defined?(Rails) && ENV["SUPER_AUTH_LOG_LEVEL"] == "debug"
26
+ Rails.logger
27
+ elsif ENV["SUPER_AUTH_LOG_LEVEL"] == "debug"
28
+ require "logger"
29
+ logger = Logger.new(STDOUT)
30
+ else
31
+ nil
32
+ end
32
33
 
33
- require 'basic_loader' unless defined?(SuperAuth::AUTOLOADERS)
34
+ if !ENV['SUPER_AUTH_DATABASE_URL'].nil? && !ENV['SUPER_AUTH_DATABASE_URL'].empty?
35
+ SuperAuth.db = Sequel.connect(ENV['SUPER_AUTH_DATABASE_URL'], logger: logger)
36
+ else
37
+ puts "ENV SUPER_AUTH_DATABASE_URL not set, using sqlite."
38
+ SuperAuth.db = Sequel.sqlite(logger: logger, database: "./tmp/test.db")
39
+ install_migrations
40
+ end
41
+ Sequel::Model.default_association_options = {:class_namespace=>'SuperAuth'}
42
+ end
34
43
 
35
- module SuperAuth
36
- class Error < StandardError; end
44
+ def self.install_migrations
45
+ require "sequel"
46
+ Sequel.extension :migration
47
+ require "pathname"
48
+ path = Pathname.new(__FILE__).parent.parent.join("db", "migrate")
49
+ Sequel::Migrator.run(SuperAuth.db, path)
50
+ end
51
+
52
+ def self.uninstall_migrations
53
+ require "sequel"
54
+ set_db
55
+ Sequel.extension :migration
56
+ require "pathname"
57
+
58
+ path = Pathname.new(__FILE__).parent.parent.join("db", "migrate")
59
+ db = SuperAuth.db
60
+
61
+ Sequel::Migrator.run(db, path, target: 0)
62
+ rescue => e
63
+ raise Error, "Failed to uninstall migrations: #{e.message}"
64
+ end
65
+
66
+ def self.current_user=(user)
67
+ @current_user = user
68
+ end
69
+
70
+ def self.current_user
71
+ @current_user
72
+ end
73
+
74
+ def self.db=(db)
75
+ @db = db
76
+ end
77
+
78
+ def self.db
79
+ @db
80
+ end
37
81
  end
82
+
83
+ require "super_auth/railtie" if defined?(Rails::Railtie)
@@ -0,0 +1,14 @@
1
+ namespace :super_auth do
2
+ desc "Run the super_auth database migrations"
3
+ task migrate: :environment do
4
+ raise "You must define SUPER_AUTH_DATABASE_URL in your environment for this to work" if ENV['SUPER_AUTH_DATABASE_URL'].nil? || ENV['SUPER_AUTH_DATABASE_URL'].empty?
5
+ SuperAuth.install_migrations
6
+ puts "Done"
7
+ end
8
+
9
+ task :rollback => :environment do
10
+ raise "You must define SUPER_AUTH_DATABASE_URL in your environment for this to work" if ENV['SUPER_AUTH_DATABASE_URL'].nil? || ENV['SUPER_AUTH_DATABASE_URL'].empty?
11
+ SuperAuth.uninstall_migrations
12
+ puts "Done"
13
+ end
14
+ end