Initial commit
This commit is contained in:
146
app/api/v2/admin/permissions.rb
Normal file
146
app/api/v2/admin/permissions.rb
Normal file
@@ -0,0 +1,146 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module API
|
||||
module V2
|
||||
module Admin
|
||||
# Admin functionality over permissions table
|
||||
class Permissions < Grape::API
|
||||
resource :permissions do
|
||||
helpers ::API::V2::NamedParams
|
||||
helpers do
|
||||
def validate_params!(params)
|
||||
unless %w(get post delete put head patch all).include?(params[:verb].downcase)
|
||||
error!({ errors: ['admin.permissions.invalid_verb'] }, 422)
|
||||
end
|
||||
|
||||
error!({ errors: ['admin.permissions.invalid_action'] }, 422) unless %w(accept drop audit).include?(params[:action].downcase)
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Returns array of permissions as paginated collection',
|
||||
failure: [
|
||||
{ code: 401, message: 'Invalid bearer token' }
|
||||
],
|
||||
success: API::V2::Entities::Permission
|
||||
params do
|
||||
use :pagination_filters
|
||||
end
|
||||
get do
|
||||
admin_authorize! :read, Permission
|
||||
|
||||
present paginate(Permission.all), with: API::V2::Entities::Permission
|
||||
end
|
||||
|
||||
desc 'Create permission',
|
||||
failure: [
|
||||
{ code: 401, message: 'Invalid bearer token' }
|
||||
],
|
||||
success: { code: 200, message: 'Permission was created' }
|
||||
params do
|
||||
requires :role,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
requires :verb,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
requires :path,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
requires :action,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
optional :topic,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
end
|
||||
post do
|
||||
admin_authorize! :create, Permission
|
||||
|
||||
validate_params!(params)
|
||||
|
||||
declared_params = declared(params, include_missing: false)
|
||||
|
||||
error!({ errors: ['admin.permission.role_doesnt_exist'] }, 422) if Permission.where(role: params[:role]).empty?
|
||||
|
||||
permission = Permission.new(declared_params)
|
||||
|
||||
code_error!(permission.errors.details, 422) unless permission.save
|
||||
|
||||
# clear cached permissions, so they will be freshly refetched on the next call to /auth
|
||||
Rails.cache.delete('permissions')
|
||||
status 200
|
||||
end
|
||||
|
||||
desc 'Deletes permission',
|
||||
failure: [
|
||||
{ code: 401, message: 'Invalid bearer token' }
|
||||
],
|
||||
success: { code: 200, message: 'Permission was deleted' }
|
||||
params do
|
||||
requires :id,
|
||||
type: Integer,
|
||||
allow_blank: false,
|
||||
desc: 'permission id'
|
||||
end
|
||||
delete do
|
||||
admin_authorize! :destroy, Permission
|
||||
|
||||
target_permission = Permission.find_by(id: params[:id])
|
||||
|
||||
error!({ errors: ['admin.permission.doesnt_exist'] }, 404) if target_permission.nil?
|
||||
|
||||
target_permission.destroy
|
||||
# clear cached permissions, so they will be freshly refetched on the next call to /auth
|
||||
Rails.cache.delete('permissions')
|
||||
|
||||
status 200
|
||||
end
|
||||
|
||||
desc 'Update Permission',
|
||||
failure: [
|
||||
{ code: 401, message: 'Invalid bearer token' }
|
||||
],
|
||||
success: { code: 200, message: 'Permission was updated' }
|
||||
params do
|
||||
requires :id,
|
||||
type: Integer,
|
||||
allow_blank: false,
|
||||
desc: 'Permission id'
|
||||
optional :role,
|
||||
type: String,
|
||||
allow_blank: false,
|
||||
desc: 'permission field - role'
|
||||
optional :verb,
|
||||
type: String,
|
||||
allow_blank: false,
|
||||
desc: 'permission field - request verb'
|
||||
optional :path,
|
||||
type: String,
|
||||
allow_blank: false,
|
||||
desc: 'permission field - request path'
|
||||
optional :action,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
optional :topic,
|
||||
type: String,
|
||||
allow_blank: false
|
||||
end
|
||||
put do
|
||||
admin_authorize! :update, Permission
|
||||
|
||||
target_permission = Permission.find_by(id: params[:id])
|
||||
error!({ errors: ['admin.permission.doesnt_exist'] }, 404) if target_permission.nil?
|
||||
|
||||
unless target_permission.update(declared(params, include_missing: false))
|
||||
code_error!(target_permission.errors.details, 422)
|
||||
end
|
||||
# clear cached permissions, so they will be freshly refetched on the next call to /auth
|
||||
Rails.cache.delete('permissions')
|
||||
|
||||
status 200
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user