isomorfeus-policy 1.0.0.delta12 → 1.0.0.epsilon1

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: 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.