69 lines
1.7 KiB
Ruby
69 lines
1.7 KiB
Ruby
|
|
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
|
||
|
|
|