isomorfeus-policy 1.0.0.delta12 → 1.0.0.epsilon1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a2fe7052bf8d2dde88e40dbaf7e84b4a346a2d76d50f388dcd921ec6c7e04f2
4
- data.tar.gz: 5b548ae9f03dd1fa28cabc0d239e7b9c5aacb9c73282e1928767d28f18dacf13
3
+ metadata.gz: 1a2f26a5f58b1c8dce4bb0439587288e5bf5b38cd48174a25abe6bf24479148d
4
+ data.tar.gz: badb0fdc82dd47c5660d737c798f81f8544a640b91e65ceb638c07f43383c290
5
5
  SHA512:
6
- metadata.gz: 23e95150876608e3da88a67cd2f25292d178f17379e033ba523b0ee3c1e146d86e11398eae9073d97abf09adc81cf07f592de7183be48fbb2efa59ccc7f625eb
7
- data.tar.gz: 9b58c54270a731b88549cff14e4217290f64125b5ce2d623578c2a9c3a5358cc910373320830f413c625e708d106d506c5fa4990dc4e0b938bc6601871f2b655
6
+ metadata.gz: d778f99cea46d15f2c21e75e80d11e4877d89908012c9610aad44da71af7873109cc965c49be7be372fc9ff5239d35ed02c69529c6e7828269eaf0945577eb5c
7
+ data.tar.gz: 59c041bb5980a783f77ecb5332b4b7e82024ef4be35dd15f0bed4f2c524485c686a2bcf4a809debbbd9c607fdf70407ee642ad93de04562efeecaf56bb5b7347
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Policy
3
- VERSION = '1.0.0.delta12'
3
+ VERSION = '1.0.0.epsilon1'
4
4
  end
5
5
  end
@@ -1,11 +1,5 @@
1
1
  module LucidPolicy
2
2
  class Base
3
3
  include LucidPolicy::Mixin
4
-
5
- if RUBY_ENGINE != 'opal'
6
- def self.inherited(base)
7
- Isomorfeus.add_valid_policy_class(base)
8
- end
9
- end
10
4
  end
11
5
  end
@@ -1,38 +1,13 @@
1
1
  module LucidPolicy
2
2
  module Mixin
3
3
  def self.included(base)
4
- if RUBY_ENGINE != 'opal'
5
- Isomorfeus.add_valid_policy_class(base) unless base == LucidPolicy::Base
6
- end
7
-
8
- # DSL
9
- # class MySimplePolicy < LucidPolicy::Base
10
- #
11
- # policy_for UserOrRoleClass
12
- #
13
- # allow BlaBlaGraph, :load
14
- #
15
- # deny BlaGraph, SuperOperation
16
- #
17
- # deny others # or: allow others
18
- #
19
- # with_condition do |user_or_role_instance, target_class, target_method, *props|
20
- # role.class == AdminRole
21
- # end
22
- #
23
- # refine BlaGraph, :load, :count do |user_or_role_instance, target_class, target_method, *props|
24
- # allow if role.verified?
25
- # deny
26
- # end
27
- # end
28
- #
29
4
  base.instance_exec do
30
5
  def policy_for(a_class)
31
6
  raise LucidPolicy::Exception, "policy_for #{a_class} can only be used once within #{self}!" if @the_class
32
7
  @the_class = a_class
33
8
  unless a_class.methods.include?(:authorization_rules)
34
9
  a_class.define_singleton_method(:authorization_rules) do
35
- @authorization_rules ||= { classes: {}, conditions: [], others: nil, policy_classes: [] }
10
+ @authorization_rules ||= {}
36
11
  end
37
12
  end
38
13
  unless a_class.method_defined?(:authorized?)
@@ -42,35 +17,35 @@ module LucidPolicy
42
17
  target_method = class_method_props[1]
43
18
  props = class_method_props[2..-1]
44
19
 
45
- condition_result = true
46
- self.class.authorization_rules[:conditions].each do |condition|
47
- condition_result = condition.call(self, target_class, target_method, *props, &condition)
48
- break unless condition_result == true
49
- end
20
+ result = :deny
21
+ self.class.authorization_rules.each_value do |rules|
22
+ condition_result = true
23
+ rules[:conditions].each do |condition|
24
+ condition_result = condition.call(self, target_class, target_method, *props, &condition)
25
+ break unless condition_result == true
26
+ end
50
27
 
51
- if condition_result
52
- result = if self.class.authorization_rules[:classes].key?(target_class)
53
- if target_method &&
54
- self.class.authorization_rules[:classes][target_class].key?(:methods) &&
55
- self.class.authorization_rules[:classes][target_class][:methods].key?(target_method)
56
- self.class.authorization_rules[:classes][target_class][:methods][target_method]
28
+ if condition_result == true
29
+ result = if rules[:classes].key?(target_class)
30
+ if target_method && rules[:classes][target_class].key?(:methods) &&
31
+ rules[:classes][target_class][:methods].key?(target_method)
32
+ rules[:classes][target_class][:methods][target_method]
33
+ else
34
+ rules[:classes][target_class][:default]
35
+ end
57
36
  else
58
- self.class.authorization_rules[:classes][target_class][:default]
37
+ rules[:others]
59
38
  end
60
- else
61
- self.class.authorization_rules[:others]
62
- end
63
-
64
- if result.class == Proc
65
- policy_helper = Isomorfeus::Policy::Helper.new
66
- policy_helper.instance_exec(self, target_class, target_method, *props, &result)
67
- result = policy_helper.result
68
- end
69
39
 
70
- result == :allow ? true : false
71
- else
72
- false
40
+ if result.class == Proc
41
+ policy_helper = Isomorfeus::Policy::Helper.new
42
+ policy_helper.instance_exec(self, target_class, target_method, *props, &result)
43
+ result = policy_helper.result
44
+ end
45
+ end
46
+ break if result == :allow
73
47
  end
48
+ result == :allow ? true : false
74
49
  end
75
50
  end
76
51
  unless a_class.method_defined?(:authorized!)
@@ -79,7 +54,7 @@ module LucidPolicy
79
54
  raise LucidPolicy::Exception, "#{self} not authorized to call #{class_method_props}"
80
55
  end
81
56
  end
82
- @the_class.authorization_rules[:policy_classes] << self
57
+ @the_class.authorization_rules[self.to_s] = { classes: {}, conditions: [], others: :deny }
83
58
  end
84
59
 
85
60
  def allow(*classes_and_methods)
@@ -103,7 +78,7 @@ module LucidPolicy
103
78
 
104
79
  def with_condition(&block)
105
80
  _raise_policy_first unless @the_class
106
- @the_class.authorization_rules[:conditions] << block
81
+ @the_class.authorization_rules[self.to_s][:conditions] << block
107
82
  end
108
83
 
109
84
  private
@@ -118,14 +93,14 @@ module LucidPolicy
118
93
 
119
94
  def _allow_or_deny(allow_or_deny, *classes_and_methods, &block)
120
95
  _raise_policy_first unless @the_class
121
-
96
+ rule_hash = @the_class.authorization_rules[self.to_s]
122
97
  allow_or_deny_or_block = block_given? ? block : allow_or_deny.to_sym
123
98
 
124
99
  target_classes = []
125
100
  target_methods = []
126
101
 
127
102
  if classes_and_methods.first == :others
128
- @the_class.authorization_rules[:others] = allow_or_deny_or_block
103
+ rule_hash[:others] = allow_or_deny_or_block
129
104
  return
130
105
  end
131
106
 
@@ -138,14 +113,14 @@ module LucidPolicy
138
113
  end
139
114
 
140
115
  target_classes.each do |target_class|
141
- @the_class.authorization_rules[:classes][target_class] = {} unless @the_class.authorization_rules[:classes].key?(target_class)
116
+ rule_hash[:classes][target_class] = {} unless rule_hash[:classes].key?(target_class)
142
117
  if allow_or_deny && target_methods.empty?
143
- @the_class.authorization_rules[:classes][target_class][:default] = allow_or_deny_or_block
118
+ rule_hash[:classes][target_class][:default] = allow_or_deny_or_block
144
119
  else
145
- @the_class.authorization_rules[:classes][target_class][:default] = :deny unless @the_class.authorization_rules[:classes][target_class].key?(:default)
146
- @the_class.authorization_rules[:classes][target_class][:methods] = {} unless @the_class.authorization_rules[:classes][target_class].key?(:methods)
120
+ rule_hash[:classes][target_class][:default] = :deny unless rule_hash[:classes][target_class].key?(:default)
121
+ rule_hash[:classes][target_class][:methods] = {} unless rule_hash[:classes][target_class].key?(:methods)
147
122
  target_methods.each do |target_method|
148
- @the_class.authorization_rules[:classes][target_class][:methods][target_method] = allow_or_deny_or_block
123
+ rule_hash[:classes][target_class][:methods][target_method] = allow_or_deny_or_block
149
124
  end
150
125
  end
151
126
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-policy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.delta12
4
+ version: 1.0.0.epsilon1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-15 00:00:00.000000000 Z
11
+ date: 2019-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 4.0.11
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.8.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.8.0
69
97
  description: Policies for Isomorfeus.
70
98
  email: jan@kursator.de
71
99
  executables: []
@@ -100,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
128
  - !ruby/object:Gem::Version
101
129
  version: 1.3.1
102
130
  requirements: []
103
- rubygems_version: 3.0.3
131
+ rubygems_version: 3.0.6
104
132
  signing_key:
105
133
  specification_version: 4
106
134
  summary: Policies for Isomorfeus.