Class: Role

Inherits:
Object
  • Object
show all
Defined in:
app/models/role.rb

Overview

Example:

Role.of(user).in(corporation).to_s    #  => "guest"
Role.of(user).in(corporation).guest?  #  => true
Role.find_all_by_user_and_group(user, corporation)

Role.of(user).for(page).to_s          #  => "admin"
Role.of(user).for(user).to_s          #  => "global_admin"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(given_user, given_object) ⇒ Role

Returns a new instance of Role.



12
13
14
15
# File 'app/models/role.rb', line 12

def initialize(given_user, given_object)
  @user = given_user
  @object = given_object
end

Class Method Details

.global_adminsObject

This finder method returns all global admins.



160
161
162
# File 'app/models/role.rb', line 160

def self.global_admins
  Group.find_everyone_group.try(:find_admins) || []
end

.of(given_user) ⇒ Object

Example:

Role.of(user).in(corporation).to_s  #  => "guest"


21
22
23
# File 'app/models/role.rb', line 21

def self.of(given_user)
  self.new(given_user, nil)
end

Instance Method Details

#admin?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'app/models/role.rb', line 85

def admin?
  global_admin? || (object && object.admins_of_self_and_ancestors.include?(user))
end

#admin_groupsObject



141
142
143
# File 'app/models/role.rb', line 141

def admin_groups
  user.groups.find_all_by_flag(:admins_parent)
end

#administrated_objectsObject



150
151
152
# File 'app/models/role.rb', line 150

def administrated_objects
  directly_administrated_objects + directly_administrated_objects.collect { |o| o.descendants }.flatten
end

#administrated_usersObject



153
154
155
# File 'app/models/role.rb', line 153

def administrated_users
  directly_administrated_groups.collect { |g| g.descendant_users }.flatten
end

#allow_preview?Boolean

Returns:

  • (Boolean)


127
128
129
130
131
# File 'app/models/role.rb', line 127

def allow_preview?
  # The preview makes sense for officers and above.
  # All above roles are also officer roles.
  officer? || global_officer?
end

#allowed_preview_rolesObject

The system allows to simulate a certain role when viewing an object. This determines which simulations are allowed.



119
120
121
122
123
124
125
126
# File 'app/models/role.rb', line 119

def allowed_preview_roles
  return ['global_admin', 'admin', 'officer', 'global_officer', 'user'] if global_admin?
  return ['admin', 'officer', 'user'] if admin?
  return ['officer', 'global_officer', 'user'] if global_officer? and officer?
  return ['officer', 'user'] if officer?
  return ['global_officer', 'user'] if global_officer?
  return []
end

#current_member?Boolean

Roles for groups

Returns:

  • (Boolean)


52
53
54
# File 'app/models/role.rb', line 52

def current_member?
  member? && full_member?
end

#deceased_member?Boolean

Returns:

  • (Boolean)


73
74
75
# File 'app/models/role.rb', line 73

def deceased_member?
  object && object.kind_of?(Group) && object.corporation? && user.id.in?(object.deceased_members.map(&:id)) && (not former_member?)
end

#directly_administrated_groupsObject



147
148
149
# File 'app/models/role.rb', line 147

def directly_administrated_groups
  admin_groups.collect { |g| g.parent_groups.first.parent_groups.first } - [nil]
end

#directly_administrated_objectsObject



144
145
146
# File 'app/models/role.rb', line 144

def directly_administrated_objects
  admin_groups.collect { |g| g.parent_groups.first.parents.first } - [nil]
end

#for(given_object) ⇒ Object



33
34
35
# File 'app/models/role.rb', line 33

def for(given_object)
  self.in(given_object)
end

#former_member?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'app/models/role.rb', line 69

def former_member?
  object && object.kind_of?(Group) && object.corporation? && user.former_member_of_corporation?(object)
end

#full_member?Boolean

Returns:

  • (Boolean)


56
57
58
59
# File 'app/models/role.rb', line 56

def full_member?
  object.kind_of?(Group) && 
    (( ([group] + group.descendant_groups) & user.groups.find_all_by_flag(:full_members) ).count > 0)
end

#global_admin?Boolean

Roles for structureables

Returns:

  • (Boolean)


81
82
83
# File 'app/models/role.rb', line 81

def global_admin?
  user.global_admin?
end

#global_officer?Boolean

Global Roles

Returns:

  • (Boolean)


112
113
114
# File 'app/models/role.rb', line 112

def global_officer?
  global_admin? || (user.ancestor_groups.find_all_by_flag(:global_officer).count > 0)
end

#groupObject



44
45
46
# File 'app/models/role.rb', line 44

def group
  @object
end

#guest?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'app/models/role.rb', line 65

def guest?
  object && object.kind_of?(Group) && user.guest_of?(object)
end

#in(given_object) ⇒ Object

Example:

Role.of(user).in(corporation).to_s  #  => "guest"


29
30
31
32
# File 'app/models/role.rb', line 29

def in(given_object)
  @object = given_object
  return self
end

#member?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'app/models/role.rb', line 61

def member?
  object && object.kind_of?(Group) && user.member_of?(object)
end

#objectObject



41
42
43
# File 'app/models/role.rb', line 41

def object
  @object
end

#officer?Boolean

Returns:

  • (Boolean)


89
90
91
# File 'app/models/role.rb', line 89

def officer?
  global_admin? || (object && object.officers_of_self_and_ancestors.include?(user))
end

#select_objects_where_user_is_admin(objects) ⇒ Object

Finding administrated objects.

Role.of(user).select_objects_where_user_is_admin(objects)
Role.of(user).administrated_users


138
139
140
# File 'app/models/role.rb', line 138

def select_objects_where_user_is_admin(objects)
  objects & administrated_objects
end

#to_sObject

Example

Role.of(user).for(page).to_s  # => 'admin'


96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/models/role.rb', line 96

def to_s
  return 'global_admin' if global_admin?
  return 'admin' if admin?
  return 'officer' if officer?
  return 'global_officer' if global_officer?
  return 'full_member' if full_member?
  return 'guest' if guest?
  return 'former_member' if former_member?
  return 'deceased_member' if deceased_member?
  return 'member' if member?
  return ''
end

#userObject



37
38
39
# File 'app/models/role.rb', line 37

def user
  @user || raise('User not given, when trying to determine Role.')
end