mikras_utils 0.5.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5ed0f08aeac113ce1baaab8a61f252fc80db284204cf6092ef9a4396f0cbe90a
4
- data.tar.gz: '09bbf4ada5bb30f2ccd9b69ce88fbedc77c36cdb6518a485a3d605c3df0df7c5'
3
+ metadata.gz: a5f3f5143ea3be29ccbdf96438b10ff7f2f59808ca6648065e5c743be051909f
4
+ data.tar.gz: 9b61802622cbaa60b2a597a477c625f4c5c2fc0d81d0a9f6e2523e1aec0abe68
5
5
  SHA512:
6
- metadata.gz: 94326cd108d93deebb637cf69684679cd16d20e760c63ad56e60a0f2d2a3b7af4d5a3cfbe58900f705c7eb1066979bffebe6751a14ae916896a4eed83d394385
7
- data.tar.gz: f19ba5e3ab24f4874a1a63d9ea8389bcc9a3a3c2e3faf557c497f9f59b4b5704f622d1542679c2ebd21355389652c3708d94e49420da6821b5390f767db4794a
6
+ metadata.gz: 931288e3bf45321e92f6245da259948768cf7f4289250c6089e96cd70fe54324f3dcdfdd8668ae22d1f5e76d7b66b5ff4cee89243058faab2baafe6fffcb43de
7
+ data.tar.gz: bb6bdf8753f2761015a88effa7345435d0177fffdb16523e5d579b2ec24427e856064a9b5e6610d4eaf0ce2752d2120fe602c1a545720d149ec8b32018c0d805
@@ -33,12 +33,13 @@ module MkAcl
33
33
  insert into acl_portal.acl_tables (
34
34
  schema_name, table_name, domain,
35
35
  parent_schema_name, parent_table_name, parent_link_field,
36
- acl_link_fields, acl)
36
+ triggers, acl_link_fields, acl)
37
37
  values (
38
38
  '#{app_schema}', '#{table}', #{conn.quote_value(table.domain)},
39
39
  #{PgConn.quote_value(table.parent && table.app_schema)},
40
40
  #{PgConn.quote_value(table.parent)},
41
41
  #{PgConn.quote_value(table.parent_link_field)},
42
+ #{table.triggers},
42
43
  #{PgConn.quote_value(table.references.values.map(&:last), elem_type: 'text')},
43
44
  #{table.acl || 'false'})
44
45
  returning id as "table_id"
@@ -44,31 +44,35 @@ module MkAcl
44
44
 
45
45
  def parse_tables(spec, tables)
46
46
  for table_name, actions in tables
47
- acl = actions.key?(:acl) ? actions.delete(:acl) : true
48
47
  parent = actions.delete(:parent)
49
48
  domain = actions.delete(:domain)
50
- table = Table.new(spec, table_name, domain, parent, acl)
49
+ triggers = actions.key?(:triggers) ? actions.delete(:triggers) : true
50
+ acl = actions.key?(:acl) ? actions.delete(:acl) : true
51
+ table = Table.new(spec, table_name, domain, parent, triggers, acl)
51
52
  parse_actions(table, actions)
52
53
  end
53
54
  end
54
55
 
55
56
  def parse_actions(table, actions)
56
57
  for action_name, rules in actions
57
- constrain?(action_name, :insert, :select, :update, :delete, :attach) or
58
+ constrain?(action_name, :insert, :select, :update, :delete, :attach, :detach) or
58
59
  error "Illegal action '#{action_name}'"
59
- constrain?(rules, String, Array, Hash) or
60
- error "Illegal value for #{action} action '#{rules}'"
61
- action = Action.new(table, action_name)
62
-
63
- # Normalize rules
64
- case rules
65
- when Hash
66
- rules = [rules]
67
- when String
68
- rules = [{ roles: rules }]
69
- end
70
60
 
71
- parse_rules(action, rules)
61
+ for real_action_name in (action_name == :attach ? [:attach, :detach] : [action_name])
62
+ constrain?(rules, String, Array, Hash) or
63
+ error "Illegal value for #{action_name} action '#{rules}'"
64
+ action = Action.new(table, real_action_name)
65
+
66
+ # Normalize rules
67
+ case rules
68
+ when Hash
69
+ rules = [rules]
70
+ when String
71
+ rules = [{ roles: rules }]
72
+ end
73
+
74
+ parse_rules(action, rules)
75
+ end
72
76
  end
73
77
  end
74
78
 
@@ -69,6 +69,9 @@ module MkAcl
69
69
  # the analyzer
70
70
  attr_accessor :domain
71
71
 
72
+ # True if the portal object triggers should be active on the table
73
+ attr_accessor :triggers
74
+
72
75
  # SQL to create the ACL for a table. No ACL if false, default ACL if nil
73
76
  attr_accessor :acl
74
77
 
@@ -84,7 +87,7 @@ module MkAcl
84
87
  # Hash from action name to action object
85
88
  attr_reader :actions
86
89
 
87
- def initialize(spec, name, domain, parent_name, acl)
90
+ def initialize(spec, name, domain, parent_name, triggers, acl)
88
91
  @spec = spec
89
92
  @references = {}
90
93
  @name = name.to_s
@@ -93,6 +96,7 @@ module MkAcl
93
96
  @parent_name = parent_name
94
97
  @parent_link_fields = []
95
98
  @domain = domain
99
+ @triggers = triggers
96
100
  @acl = acl
97
101
  @actions = {}
98
102
  @spec.send :attach_table, self
@@ -113,6 +117,7 @@ module MkAcl
113
117
  for action_name in %w(insert select update delete)
114
118
  actions[action_name]&.dump
115
119
  end
120
+ puts "triggers: #{triggers}"
116
121
  case acl
117
122
  when false; puts "acl: false"
118
123
  when true;
@@ -171,7 +176,7 @@ module MkAcl
171
176
  attr_accessor :filter # Goes into the postgres policy, may be nil
172
177
  attr_accessor :assert # Goes into the postgres trigger, may be nil
173
178
  attr_accessor :fields # Only used for insert and update, nil otherwise
174
- attr_accessor :tables # Only used for attach, nil otherwise
179
+ attr_accessor :tables # Only used for attach and detach, nil otherwise
175
180
  attr_reader :ordinal
176
181
 
177
182
  # admin, internal, etc.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MikrasUtils
4
- VERSION = "0.5.1"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mikras_utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-20 00:00:00.000000000 Z
11
+ date: 2025-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg_conn