78 lines
2.4 KiB
Ruby
78 lines
2.4 KiB
Ruby
require "mongoid"
|
|
|
|
module Devops
|
|
module Model
|
|
class Role
|
|
|
|
include ::Mongoid::Document
|
|
include ::Mongoid::Timestamps::CreatedInt
|
|
include ::ActiveModel::Validations
|
|
|
|
store_in collection: "roles"
|
|
|
|
SUPER_USER_ROLE = 'super_user'
|
|
|
|
field :_id, as: :'id', overwrite: true, type: String, default: ->{ self.name.downcase.gsub(%r(\s+), "_") if self.name }
|
|
field :name, type: String
|
|
field :description, type: String
|
|
field :policies, type: Array, default: ->{ [] }
|
|
|
|
validates_presence_of :id, message: "'id' is undefined"
|
|
validates_uniqueness_of :id, on: :create
|
|
|
|
validates_presence_of :name, message: "'name' is undefined"
|
|
validates_format_of :name, with: /\A[\w\s]{1,99}\z/, message: "invalid name"
|
|
|
|
validates_length_of :description, maximum: 500
|
|
|
|
validates_presence_of :policies, message: "'policies' is undefined"
|
|
|
|
validate :validate_policies
|
|
|
|
def initialize hash
|
|
raise InvalidRecord.new("Parameter 'name' is not a string") unless hash["name"].is_a?(String)
|
|
raise InvalidRecord.new("Parameter 'description' is not a string") unless hash["description"].is_a?(String)
|
|
raise InvalidRecord.new("Parameter 'policies' is not an array") unless hash["policies"].is_a?(Array)
|
|
super(hash)
|
|
end
|
|
|
|
def validate_policies
|
|
res = self.class.check_policies(self.policies)
|
|
errors.add(:policies, res) unless res.nil?
|
|
end
|
|
|
|
def to_hash
|
|
hash = self.attributes
|
|
hash["id"] = hash.delete("_id")
|
|
# hash["created_at"] = hash.delete("created_at").to_i if hash["created_at"]
|
|
hash
|
|
end
|
|
|
|
def self.check_policies policies
|
|
if policies.nil?
|
|
return "Policies parameter can not be null, it must be an array"
|
|
end
|
|
available_policies = Devops::Api3.policies.keys
|
|
if policies.include?("all")
|
|
policies.clear
|
|
policies.push 'all'
|
|
else
|
|
invalid_policies = []
|
|
policies.each do |p|
|
|
if p.is_a?(String)
|
|
invalid_policies.push(p) unless available_policies.include?(p.to_sym)
|
|
else
|
|
return "Invalid value '#{p}': policy must be a string"
|
|
end
|
|
end
|
|
unless invalid_policies.empty?
|
|
return "Invalid policies: #{invalid_policies.join(', ')}"
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
end
|
|
end
|
|
end
|