mikras_utils 0.1.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.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +10 -0
  5. data/README.md +31 -0
  6. data/Rakefile +8 -0
  7. data/acl-build +5 -0
  8. data/build +11 -0
  9. data/exe/mikras_utils +5 -0
  10. data/exe/mkacl +59 -0
  11. data/lib/mikras_utils/mkacl/analyzer.rb +46 -0
  12. data/lib/mikras_utils/mkacl/generator.rb +55 -0
  13. data/lib/mikras_utils/mkacl/generators/acl_functions.rb +208 -0
  14. data/lib/mikras_utils/mkacl/generators/id_functions.rb +262 -0
  15. data/lib/mikras_utils/mkacl/generators/insert_triggers.rb +267 -0
  16. data/lib/mikras_utils/mkacl/generators/role_functions.rb +72 -0
  17. data/lib/mikras_utils/mkacl/generators/rules.rb +80 -0
  18. data/lib/mikras_utils/mkacl/parser.rb +73 -0
  19. data/lib/mikras_utils/mkacl/spec.rb +154 -0
  20. data/lib/mikras_utils/mkacl.rb +18 -0
  21. data/lib/mikras_utils/version.rb +5 -0
  22. data/lib/mikras_utils.rb +6 -0
  23. data/sig/mikras_utils.rbs +4 -0
  24. data/tests/acl.fox +312 -0
  25. data/tests/acl.spec +135 -0
  26. data/tests/acl.sql +132 -0
  27. data/tests/acl_portal-functions.sql +94 -0
  28. data/tests/acl_portal-tables.sql +23 -0
  29. data/tests/acl_portal-views.sql +73 -0
  30. data/tests/agg.sql +25 -0
  31. data/tests/app.sql +48 -0
  32. data/tests/app_portal-tables.sql +138 -0
  33. data/tests/app_portal-triggers.sql +23 -0
  34. data/tests/app_portal-views.sql +203 -0
  35. data/tests/auth.sql +12 -0
  36. data/tests/auth.users.sql +5 -0
  37. data/tests/build +7 -0
  38. data/tests/final-functions.sql +28 -0
  39. data/tests/fox.sql +158 -0
  40. data/tests/initial-functions.sql +6 -0
  41. data/tests/meta.sql +197 -0
  42. data/tests/reflections.yml +5 -0
  43. data/tests/schemas.sql +25 -0
  44. data/tests/setup.sql +8 -0
  45. data/tests/sys_portal.sql +172 -0
  46. metadata +145 -0
@@ -0,0 +1,172 @@
1
+
2
+ \set ON_ERROR_STOP on
3
+
4
+ drop schema if exists sys_portal cascade;
5
+ create schema sys_portal;
6
+ set search_path to sys_portal;
7
+
8
+ /*
9
+ -- TODO: Move to acl_portal unify definitions
10
+
11
+ drop view if exists acl_roles cascade;
12
+ create view acl_roles as
13
+ select
14
+ id as "role_id",
15
+ 'CASE'::varchar as "kind",
16
+ role
17
+ from
18
+ app_portal.case_roles
19
+ union
20
+ select
21
+ id as "role_id",
22
+ 'EVENT'::varchar as "kind",
23
+ role
24
+ from
25
+ app_portal.event_roles
26
+ ;
27
+
28
+ \echo ACL_ROLES
29
+ select * from acl_roles;
30
+
31
+ drop view if exists name_acl_roles cascade;
32
+ create view name_acl_roles as
33
+ select
34
+ ar.*,
35
+ case
36
+ when cr.id is not null then
37
+ c1.ident || '/' || cr.role
38
+ else
39
+ c2.ident || '/' || e.label || '/' || er.role
40
+ end as "acl"
41
+ from
42
+ acl_roles ar
43
+ left join app_portal.case_roles cr on cr.id = ar.role_id
44
+ left join app_portal.cases c1 on c1.id = cr.case_id
45
+ left join app_portal.event_roles er on er.id = ar.role_id
46
+ left join app_portal.events e on e.id = er.event_id
47
+ left join app_portal.cases c2 on c2.id = e.case_id
48
+ ;
49
+
50
+ \echo NAME_ACL_ROLES
51
+ select * from name_acl_roles;
52
+
53
+ drop view if exists acl_users cascade;
54
+ create view acl_users as
55
+ with
56
+ case_acls as (
57
+ select
58
+ u.id as "user_id",
59
+ c.id as "case_id",
60
+ cr.id as "role_id"
61
+ from
62
+ auth.roles u
63
+ join app_portal.case_users cu on cu.user_id = u.id
64
+ join app_portal.case_roles cr on cr.id = cu.case_role_id
65
+ join app_portal.cases c on c.id = cr.case_id
66
+ where
67
+ c.closed = false
68
+ and cr.role <> 'TA'
69
+ ),
70
+ event_acls as (
71
+ select
72
+ u.id as "user_id",
73
+ e.case_id as "case_id",
74
+ er.id as "role_id"
75
+ from
76
+ auth.roles u
77
+ join app_portal.event_users eu on eu.user_id = u.id
78
+ join app_portal.event_roles er on er.id = eu.event_role_id
79
+ join app_portal.events e on e.id = er.event_id
80
+ where
81
+ e.closed = false
82
+ ),
83
+ te_acls as (
84
+ select
85
+ u.id as "user_id",
86
+ e.case_id as "case_id",
87
+ cr.id as "role_id"
88
+ from
89
+ auth.roles u
90
+ join app_portal.event_users eu on eu.user_id = u.id
91
+ join app_portal.event_roles er on er.id = eu.event_role_id
92
+ join app_portal.events e on e.id = er.event_id
93
+ join app_portal.case_roles cr on cr.case_id = e.case_id
94
+ where
95
+ er.role = 'TA'
96
+ and cr.role = 'TE'
97
+ )
98
+ select * from case_acls
99
+ union
100
+ select * from event_acls
101
+ union
102
+ select * from te_acls
103
+ ;
104
+
105
+ \echo ACL_USERS
106
+ select * from acl_users;
107
+
108
+ drop view if exists agg_acl_users cascade;
109
+ create view agg_acl_users as
110
+ select
111
+ user_id,
112
+ array_agg(role_id) as "role_ids"
113
+ from
114
+ acl_users
115
+ group by
116
+ user_id
117
+ ;
118
+
119
+ \echo AGG_ACL_USERS
120
+ select * from agg_acl_users;
121
+
122
+ drop view if exists name_acl_users;
123
+ create view name_acl_users as
124
+ select
125
+ au.*,
126
+ u.rolename,
127
+ c.ident as "case",
128
+ e.label as "event",
129
+ coalesce(cr.role, er.role) as "role",
130
+ case
131
+ when cr.id is not null then
132
+ c.ident || '/' || cr.role
133
+ else
134
+ c.ident || '/' || e.label || '/' || er.role
135
+ end as "acl"
136
+ from
137
+ acl_users au
138
+ join auth.roles u on u.id = au.user_id
139
+ join app_portal.cases c on c.id = au.case_id
140
+ left join app_portal.case_roles cr on cr.id = au.role_id
141
+ left join app_portal.event_roles er on er.id = au.role_id
142
+ left join app_portal.events e on e.id = er.event_id
143
+ ;
144
+
145
+ \echo NAME_ACL_USERS
146
+ select * from name_acl_users;
147
+
148
+ drop view if exists agg_name_acl_users cascade;
149
+ create view agg_name_acl_users as
150
+ select
151
+ user_id,
152
+ array_agg(role_id) as role_ids,
153
+ rolename,
154
+ array_agg(acl) as acls
155
+ from
156
+ name_acl_users
157
+ group by
158
+ user_id,
159
+ rolename
160
+ ;
161
+
162
+ \echo AGG_NAME_ACL_USERS
163
+ select * from agg_name_acl_users;
164
+
165
+ -- Materialized view or maintained by triggers
166
+ create view acls as
167
+ select * from agg_acl_users
168
+ ;
169
+
170
+ \echo ACLS
171
+ select * from acls;
172
+ */
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mikras_utils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Claus Rasmussen
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-07-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pg_conn
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: shellopts
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: string-text
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: prick-inflector
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Gem mikras_utils
70
+ email:
71
+ - claus.l.rasmussen@gmail.com
72
+ executables:
73
+ - mikras_utils
74
+ - mkacl
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - ".rspec"
79
+ - ".ruby-version"
80
+ - Gemfile
81
+ - README.md
82
+ - Rakefile
83
+ - acl-build
84
+ - build
85
+ - exe/mikras_utils
86
+ - exe/mkacl
87
+ - lib/mikras_utils.rb
88
+ - lib/mikras_utils/mkacl.rb
89
+ - lib/mikras_utils/mkacl/analyzer.rb
90
+ - lib/mikras_utils/mkacl/generator.rb
91
+ - lib/mikras_utils/mkacl/generators/acl_functions.rb
92
+ - lib/mikras_utils/mkacl/generators/id_functions.rb
93
+ - lib/mikras_utils/mkacl/generators/insert_triggers.rb
94
+ - lib/mikras_utils/mkacl/generators/role_functions.rb
95
+ - lib/mikras_utils/mkacl/generators/rules.rb
96
+ - lib/mikras_utils/mkacl/parser.rb
97
+ - lib/mikras_utils/mkacl/spec.rb
98
+ - lib/mikras_utils/version.rb
99
+ - sig/mikras_utils.rbs
100
+ - tests/acl.fox
101
+ - tests/acl.spec
102
+ - tests/acl.sql
103
+ - tests/acl_portal-functions.sql
104
+ - tests/acl_portal-tables.sql
105
+ - tests/acl_portal-views.sql
106
+ - tests/agg.sql
107
+ - tests/app.sql
108
+ - tests/app_portal-tables.sql
109
+ - tests/app_portal-triggers.sql
110
+ - tests/app_portal-views.sql
111
+ - tests/auth.sql
112
+ - tests/auth.users.sql
113
+ - tests/build
114
+ - tests/final-functions.sql
115
+ - tests/fox.sql
116
+ - tests/initial-functions.sql
117
+ - tests/meta.sql
118
+ - tests/reflections.yml
119
+ - tests/schemas.sql
120
+ - tests/setup.sql
121
+ - tests/sys_portal.sql
122
+ homepage: http://www.nowhere.com/
123
+ licenses: []
124
+ metadata:
125
+ homepage_uri: http://www.nowhere.com/
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 2.6.0
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.3.7
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Gem mikras_utils
145
+ test_files: []