Add ability to manage and grant IAM permissions as policy
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
5645e8fae1
commit
f2995899ec
@ -0,0 +1,87 @@
|
|||||||
|
import CRUDBase from '../CRUDBase.js'
|
||||||
|
|
||||||
|
class PermissionResource extends CRUDBase {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
|
||||||
|
this.endpoint = '/api/v1/iam/permission'
|
||||||
|
this.required_fields = ['target_type', 'permission']
|
||||||
|
this.permission_base = 'v1:iam:permission'
|
||||||
|
|
||||||
|
this.item = 'IAM Permission'
|
||||||
|
this.plural = 'IAM Permissions'
|
||||||
|
|
||||||
|
this.listing_definition = {
|
||||||
|
display: `Permissions are custom actions that can be performed on a given IAM target by the subject.`,
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
name: 'Target Type',
|
||||||
|
field: 'target_type',
|
||||||
|
renderer: type => type.split('_').map(x => `${x.charAt(0).toUpperCase()}${x.slice(1)}`).join(' '),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Permission',
|
||||||
|
field: 'permission',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
actions: [
|
||||||
|
{
|
||||||
|
type: 'resource',
|
||||||
|
position: 'main',
|
||||||
|
action: 'insert',
|
||||||
|
text: 'Create New',
|
||||||
|
color: 'success',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'resource',
|
||||||
|
position: 'row',
|
||||||
|
action: 'update',
|
||||||
|
icon: 'fa fa-edit',
|
||||||
|
color: 'primary',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'resource',
|
||||||
|
position: 'row',
|
||||||
|
action: 'delete',
|
||||||
|
icon: 'fa fa-times',
|
||||||
|
color: 'danger',
|
||||||
|
confirm: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
this.form_definition = {
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'Target Type',
|
||||||
|
field: 'target_type',
|
||||||
|
required: true,
|
||||||
|
type: 'select',
|
||||||
|
options: [
|
||||||
|
{display: 'Application', value: 'application'},
|
||||||
|
{display: 'Api Scope', value: 'api_scope'},
|
||||||
|
{display: 'Machine', value: 'machine'},
|
||||||
|
{display: 'Machine Group', value: 'machine_group'},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Permission',
|
||||||
|
field: 'permission',
|
||||||
|
required: true,
|
||||||
|
type: 'text',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
/*handlers: {
|
||||||
|
insert: {
|
||||||
|
action: 'back',
|
||||||
|
},
|
||||||
|
update: {
|
||||||
|
action: 'back',
|
||||||
|
},
|
||||||
|
},*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const iam_permission = new PermissionResource()
|
||||||
|
export { iam_permission }
|
@ -0,0 +1,23 @@
|
|||||||
|
const { Model } = require('flitter-orm')
|
||||||
|
|
||||||
|
class PermissionModel extends Model {
|
||||||
|
static get schema() {
|
||||||
|
return {
|
||||||
|
active: { type: Boolean, default: true },
|
||||||
|
target_type: String,
|
||||||
|
permission: String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async to_api() {
|
||||||
|
return {
|
||||||
|
_id: this.id,
|
||||||
|
id: this.id,
|
||||||
|
active: this.active,
|
||||||
|
target_type: this.target_type,
|
||||||
|
permission: this.permission,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = exports = PermissionModel
|
@ -1,4 +1,5 @@
|
|||||||
module.exports = exports = {
|
module.exports = exports = {
|
||||||
policy_not_found: 'Policy not found with that ID.',
|
policy_not_found: 'Policy not found with that ID.',
|
||||||
|
permission_not_found: 'Permission not found with that ID.',
|
||||||
invalid_entity: 'Invalid entity_type. Must be one of:'
|
invalid_entity: 'Invalid entity_type. Must be one of:'
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in new issue