fluke/devops-service/app/api3/handlers/user.rb

69 lines
1.7 KiB
Ruby
Raw Normal View History

2018-04-04 22:44:39 +03:00
require "db/mongo/models/user"
require "app/api3/parsers/user"
require_relative "request_handler"
module Devops
module API3
module Handler
class User < RequestHandler
set_parser Devops::API3::Parser::UserParser
def users
Devops::Model::User.all
end
def create
Devops::Model::User.create! parser.create
end
def get_user id
Devops::Model::User.find(id)
rescue Mongoid::Errors::DocumentNotFound
raise Devops::Exception::RecordNotFound.new("User with id '#{id}' not found")
end
def delete user_id
user = get_user(user_id)
projects = Devops::Model::Project.find({'environments.users' => user_id})
str = ""
projects.each do |p|
p.environments.each do |e|
str+="#{p.id}.#{e.id} " if e.users.include? user_id
end
end
raise Devops::Exception::ConflictError.new "Deleting is forbidden: User is included in #{str}"
rescue Mongoid::Errors::DocumentNotFound
user.delete
end
def add_roles id
user = get_user(id)
user.add_to_set({roles: parser.roles})
end
def delete_roles id
user = get_user(id)
user.pull_all({roles: parser.roles})
end
def change user_id, action
user = get_user(user_id)
user.send action + "=", parser.change(action)
user.save!
end
def update_user id
user = get_user(id)
obj = parser.update_user
%w(email password roles).each do |key|
user.send(key + "=", obj[key]) if obj.key?(key)
end
user.save!
end
end
end
end
end