Module: Mongoid::AuthorizedObject

Extended by:
ActiveSupport::Concern
Defined in:
lib/kit/models/authorized_object.rb

Instance Method Summary collapse

Instance Method Details

#able_update?(user) ⇒ Boolean

Returns:

  • (Boolean)


145
146
147
# File 'lib/kit/models/authorized_object.rb', line 145

def able_update? user
  user.roles.any?{|role| normalized_collaborators.include? role}
end

#able_view?(user) ⇒ Boolean

Special Permissions

Returns:

  • (Boolean)


141
142
143
# File 'lib/kit/models/authorized_object.rb', line 141

def able_view? user
  user.roles.any?{|role| viewers.include? role}
end

#add_collaborator(role) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/kit/models/authorized_object.rb', line 108

def add_collaborator role
  role = role.to_s
  should_be_valid_user_input_role role
  return if collaborators.include? role
  collaborators = self.collaborators.clone       
  collaborators << role
  self.collaborators = collaborators
  
  add_viewer role
  
  collaborators
end

#add_viewer(role) ⇒ Object

Viewers and Collaborators



66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/kit/models/authorized_object.rb', line 66

def add_viewer role
  role = role.to_s
  should_be_valid_user_input_role role                    
  
  return if viewers.include? role          
  
  roles = viewers
  roles << role          
  roles = Role.denormalize_to_higher_roles roles          
  roles << 'manager' unless roles.include? 'manager'
  self.viewers = roles.sort
  viewers
end

#minor_viewersObject



98
99
100
101
102
103
104
105
106
# File 'lib/kit/models/authorized_object.rb', line 98

def minor_viewers
  unless minor_viewers = cache[:minor_viewers]
    viewers = self.viewers.clone
    viewers.delete 'manager'
    minor_viewers = Role.minor_roles viewers
    cache[:minor_viewers] = minor_viewers
  end
  minor_viewers
end

#normalized_collaboratorsObject



128
129
130
131
132
133
134
135
136
# File 'lib/kit/models/authorized_object.rb', line 128

def normalized_collaborators
  unless normalized_collaborators = cache[:normalized_collaborators]
    normalized_collaborators = Role.denormalize_to_higher_roles collaborators
    normalized_collaborators << "user:#{owner_name}" unless Mongoid::Authorized.anonymous?(owner_name)
    normalized_collaborators.sort!
    cache[:normalized_collaborators] = normalized_collaborators
  end
  normalized_collaborators
end

#ownerObject

Owner



33
34
35
36
# File 'lib/kit/models/authorized_object.rb', line 33

def owner
  return nil if owner_name.blank?
  cache[:owner] ||= Models::User.by_name!(owner_name)
end

#owner=(user) ⇒ Object



38
39
40
41
42
43
# File 'lib/kit/models/authorized_object.rb', line 38

def owner= user
  user.must_be.an Models::User
  cache[:owner] = user
  self.owner_name = user.name
  user
end

#owner_name=(name) ⇒ Object

TODO3 update it later, MM uses public API to unmarshal object groups.google.com/group/mongomapper/browse_thread/thread/ab34457e0ba9c472#



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/kit/models/authorized_object.rb', line 47

def owner_name= name                    
  owner_role = "user:#{name}"
  old_owner_role = "user:#{owner_name}"
  
  unless viewers.include? owner_role
    viewers.delete old_owner_role
    viewers << owner_role
    viewers.sort!
  end
  
  # write_attribute :owner_name, name
  super name
  clear_cache
  owner_name
end

#remove_collaborator(role) ⇒ Object



121
122
123
124
125
126
# File 'lib/kit/models/authorized_object.rb', line 121

def remove_collaborator role
  role = role.to_s
  should_be_valid_user_input_role role                    
  collaborators.delete role
  collaborators
end

#remove_viewer(role) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/kit/models/authorized_object.rb', line 80

def remove_viewer role
  role = role.to_s
  should_be_valid_user_input_role role          
  
  return unless viewers.include? role
  
  roles = viewers
  Role.denormalize_to_higher_roles([role]).each do |r|
    roles.delete r
  end
  roles << 'manager' unless roles.include? 'manager'
  self.viewers = roles.sort
  
  remove_collaborator role
  
  viewers
end