61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require "db/mongo/models/role" | ||
|  | require "app/api3/parsers/roles" | ||
|  | require_relative "request_handler" | ||
|  | 
 | ||
|  | module Devops | ||
|  |   module API3 | ||
|  |     module Handler | ||
|  |       class Roles < RequestHandler | ||
|  | 
 | ||
|  |         set_parser Devops::API3::Parser::RolesParser | ||
|  | 
 | ||
|  |         def policies | ||
|  |           Devops::Api3.policies.values | ||
|  |         end | ||
|  | 
 | ||
|  |         def roles | ||
|  |           Devops::Model::Role.all | ||
|  |         end | ||
|  | 
 | ||
|  |         def role id | ||
|  |           Devops::Model::Role.find(id) | ||
|  |         rescue Mongoid::Errors::DocumentNotFound | ||
|  |           raise Devops::Exception::RecordNotFound.new("Role with id '#{id}' not found") | ||
|  |         end | ||
|  | 
 | ||
|  |         def create_role | ||
|  |           Devops::Model::Role.create!(parser.create) | ||
|  |         rescue Mongoid::Errors::Validations => e | ||
|  |           raise Devops::Exception::ValidationError.create_from_db_exception(e) | ||
|  |         end | ||
|  | 
 | ||
|  |         def add_policies role_id | ||
|  |           list_to_add = parser.policies | ||
|  |           db_role = role(role_id) | ||
|  |           db_role.add_to_set({policies: list_to_add}) | ||
|  |         end | ||
|  | 
 | ||
|  |         def delete_policies role_id | ||
|  |           list_to_pull = parser.policies | ||
|  |           db_role = role(role_id) | ||
|  |           db_role.pull_all({policies: list_to_pull}) | ||
|  |         end | ||
|  | 
 | ||
|  |         def delete_role id | ||
|  |           role = role(id) | ||
|  |           users = [] | ||
|  |           Devops::Model::User.where(roles: id).each do |u| | ||
|  |             users.push u.id | ||
|  |           end | ||
|  |           unless users.empty? | ||
|  |             raise Devops::Exception::ConflictError.new("Role '#{role.name}' used with users '#{users.join("', '")}'") | ||
|  |           end | ||
|  |           role.delete | ||
|  |         end | ||
|  | 
 | ||
|  |       end | ||
|  |     end | ||
|  |   end | ||
|  | end | ||
|  | 
 |