permissionable.rb revision d62eba79f306957dd89ea9d3313600e98e2a8beb
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Deny if role is unknown or user is wrong object.
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller return false unless [:owner, :editor].include? role
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Allow any admin user.
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Retrieve direct user permissions.
8c1be7aa00ddeb367fac5d3e8574429a301dbeb7Julian Kornberger @perms = Permission.item(self).subject(user).all
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Retrieve permissions through team.
8c1be7aa00ddeb367fac5d3e8574429a301dbeb7Julian Kornberger @perms << Permission.item(self).subject(team).all
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Deny if no permission is found.
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller return false unless @perms
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Allow if role matches any permission.
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller @perms.flatten.each do |perm|
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller return true if perm.role == role.to_s
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller return true if perm.role == 'owner' and role == :editor
418f6b8fb54a23686e8a384a65903df27e59c03bhenning mueller # Deny otherwise.