Class Authorization::DevelopmentSupport::ChangeSupporter::Approach
In: lib/declarative_authorization/development_support/change_supporter.rb
Parent: Object

Methods

Attributes

engine  [R] 
failed_tests  [R] 
steps  [R] 
users  [R] 

Public Class methods

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 134
134:         def initialize (engine, users, steps)
135:           @engine, @users, @steps = engine, users, steps
136:         end

Public Instance methods

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 225
225:         def <=> (other)
226:           sort_value <=> other.sort_value
227:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 164
164:         def abstract_actions
165:           if failed_tests.first.positive
166:             [
167:               AssignPrivilegeToRoleAction,
168:               AssignRoleToUserAction,
169:               CreateAndAssignRoleToUserAction,
170:               AddPrivilegeAndAssignRoleToUserAction
171:             ]
172:           else
173:             [
174:               RemovePrivilegeFromRoleAction,
175:               RemoveRoleFromUserAction
176:             ]
177:           end
178:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 145
145:         def affected_users (original_engine, original_users, privilege, context)
146:           (0...@users.length).select do |i|
147:             original_engine.permit?(privilege, :context => context,
148:               :skip_attribute_test => true, :user => original_users[i]) !=
149:                 @engine.permit?(privilege, :context => context,
150:                   :skip_attribute_test => true, :user => @users[i])
151:           end.collect {|i| original_users[i]}
152:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 184
184:         def apply (action)
185:           ok = action.apply(self)
186:           @steps << action if ok
187:           ok
188:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 160
160:         def changes
161:           @steps
162:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 138
138:         def check (approach_checker)
139:           res = approach_checker.check(@engine, @users)
140:           @failed_tests = approach_checker.failed_tests
141:           #puts "CHECKING #{inspect} (#{res}, #{sort_value})"
142:           res
143:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 154
154:         def initialize_copy (other)
155:           @engine = @engine.clone
156:           @users = @users.clone
157:           @steps = @steps.clone
158:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 219
219:         def inspect
220:           "Approach: Steps: #{changes.map(&:inspect) * ', '}"# +
221:              # "\n  Roles: #{AnalyzerEngine.roles(@engine).map(&:to_sym).inspect}; " +
222:              # "\n  Users: #{@users.map(&:role_symbols).inspect}"
223:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 180
180:         def reverse_of_previous? (specific_action)
181:           changes.any? {|step| step.reverse?(specific_action)}
182:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 213
213:         def similar_to (other)
214:           other.weight == weight and
215:               other.changes.map {|change| change.class.name}.sort ==
216:                 changes.map {|change| change.class.name}.sort
217:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 205
205:         def sort_value
206:           weight + @failed_tests.length
207:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 195
195:         def state_hash
196:           @state_hash ||= @engine.auth_rules.inject(0) do |memo, rule|
197:               memo + rule.privileges.hash + rule.contexts.hash +
198:                   rule.attributes.hash + rule.role.hash
199:             end +
200:               @users.inject(0) {|memo, user| memo + user.role_symbols.hash } +
201:               @engine.privileges.hash + @engine.privilege_hierarchy.hash +
202:               @engine.roles.hash + @engine.role_hierarchy.hash
203:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 190
190:         def subset? (other_approach)
191:           other_approach.changes.length >= changes.length &&
192:               changes.all? {|step| other_approach.changes.any? {|step_2| step_2.eql?(step)} }
193:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 209
209:         def weight
210:           changes.sum(&:weight)
211:         end

[Validate]