|
import Base from './base.js'; |
|
import Permission from './permission.js'; |
|
import User from './user.js'; |
|
|
|
class Role extends Base { |
|
static tableName = 'roles'; |
|
|
|
static jsonSchema = { |
|
type: 'object', |
|
required: ['name', 'key'], |
|
|
|
properties: { |
|
id: { type: 'string', format: 'uuid' }, |
|
name: { type: 'string', minLength: 1 }, |
|
key: { type: 'string', minLength: 1 }, |
|
description: { type: ['string', 'null'], maxLength: 255 }, |
|
createdAt: { type: 'string' }, |
|
updatedAt: { type: 'string' }, |
|
}, |
|
}; |
|
|
|
static get virtualAttributes() { |
|
return ['isAdmin']; |
|
} |
|
|
|
static relationMappings = () => ({ |
|
users: { |
|
relation: Base.HasManyRelation, |
|
modelClass: User, |
|
join: { |
|
from: 'roles.id', |
|
to: 'users.role_id', |
|
}, |
|
}, |
|
permissions: { |
|
relation: Base.HasManyRelation, |
|
modelClass: Permission, |
|
join: { |
|
from: 'roles.id', |
|
to: 'permissions.role_id', |
|
}, |
|
}, |
|
}); |
|
|
|
get isAdmin() { |
|
return this.key === 'admin'; |
|
} |
|
|
|
static async findAdmin() { |
|
return await this.query().findOne({ key: 'admin' }); |
|
} |
|
} |
|
|
|
export default Role; |
|
|