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
|
||
|
|
|