Class Authorization::DevelopmentSupport::ChangeSupporter::AssignRoleToUserAction
In: lib/declarative_authorization/development_support/change_supporter.rb
Parent: AbstractAction

Methods

apply   hash   new   resembles?   reverse?   specific_actions   to_a  

Attributes

role  [R] 
user  [R] 

Public Class methods

[Source]

     # 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

[Source]

     # 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

Public Instance methods

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 384
384:         def reverse? (other)
385:           other.is_a?(RemoveRoleFromUserAction) and
386:               other.user.login == @user.login and
387:               other.role == @role
388:         end

[Source]

     # File lib/declarative_authorization/development_support/change_supporter.rb, line 394
394:         def to_a
395:           [:assign_role_to_user, @role, @user]
396:         end

[Validate]