| Class | Authorization::DevelopmentSupport::ChangeSupporter::AssignRoleToUserAction |
| In: |
lib/declarative_authorization/development_support/change_supporter.rb
|
| Parent: | AbstractAction |
| role | [R] | |
| user | [R] |
# File lib/declarative_authorization/development_support/change_supporter.rb, line 360
360: def initialize (user, role_sym)
361: @user, @role = user, role_sym
362: end
# File lib/declarative_authorization/development_support/change_supporter.rb, line 350
350: def self.specific_actions (candidate)
351: privilege = candidate.failed_tests.first.privilege
352: context = candidate.failed_tests.first.context
353: user = candidate.failed_tests.first.user
354: AnalyzerEngine::Role.all_for_privilege(privilege, context, candidate.engine).collect do |role|
355: new(user, role.to_sym)
356: end
357: end
# File lib/declarative_authorization/development_support/change_supporter.rb, line 364
364: def apply (candidate)
365: if candidate.engine.roles_with_hierarchy_for(@user).include?(@role)
366: false
367: else
368: # beware of shallow copies!
369: cloned_user = @user.clone
370: user_index = candidate.users.index(@user)
371: raise "Cannot find #{@user.inspect} in users array" unless user_index
372: candidate.users[user_index] = cloned_user
373: # possible on real user objects?
374: cloned_user.role_symbols << @role
375: raise "User#role_symbols immutable or user only shallowly cloned!" if cloned_user.role_symbols == @user.role_symbols
376: true
377: end
378: end
# File lib/declarative_authorization/development_support/change_supporter.rb, line 380
380: def hash
381: to_a[0,2].hash + @user.login.hash
382: end
# File lib/declarative_authorization/development_support/change_supporter.rb, line 390
390: def resembles? (spec)
391: super(spec[0,2]) and (spec.length == 2 or spec[2] == @user.login)
392: end