| Class | Authorization::DevelopmentSupport::ChangeSupporter::Approach |
| In: |
lib/declarative_authorization/development_support/change_supporter.rb
|
| Parent: | Object |
| engine | [R] | |
| failed_tests | [R] | |
| steps | [R] | |
| users | [R] |
# 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
# File lib/declarative_authorization/development_support/change_supporter.rb, line 225
225: def <=> (other)
226: sort_value <=> other.sort_value
227: end
# 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
# 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
# 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
# File lib/declarative_authorization/development_support/change_supporter.rb, line 160
160: def changes
161: @steps
162: end
# 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
# 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
# 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
# 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
# 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
# File lib/declarative_authorization/development_support/change_supporter.rb, line 205
205: def sort_value
206: weight + @failed_tests.length
207: end
# 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