65 lines
2.0 KiB
JavaScript
65 lines
2.0 KiB
JavaScript
module.exports = Self => {
|
|
/**
|
|
* Checks if current user has
|
|
* read privileges over a collection
|
|
*
|
|
* @param {object} ctx - Request context
|
|
* @param {interger} name - Collection name
|
|
* @param {object} options - Query options
|
|
* @return {boolean} True for user with read privileges
|
|
*/
|
|
Self.hasReadRole = async(ctx, name, options) => {
|
|
const collection = await Self.findOne({where: {name}}, {
|
|
include: {
|
|
relation: 'readRole'
|
|
}
|
|
}, options);
|
|
|
|
return await hasRole(ctx, collection, options);
|
|
};
|
|
|
|
/**
|
|
* Checks if current user has
|
|
* write privileges over a collection
|
|
*
|
|
* @param {object} ctx - Request context
|
|
* @param {string} name - Collection name
|
|
* @param {object} options - Query options
|
|
* @return {boolean} True for user with write privileges
|
|
*/
|
|
Self.hasWriteRole = async(ctx, name, options) => {
|
|
const collection = await Self.findOne({
|
|
include: {
|
|
relation: 'writeRole'
|
|
},
|
|
where: {name}
|
|
}, options);
|
|
|
|
return await hasRole(ctx, collection, options);
|
|
};
|
|
|
|
/**
|
|
* Checks if current user has
|
|
* read or write privileges
|
|
* @param {Object} ctx - Context
|
|
* @param {Object} collection - Collection [read/write]
|
|
* @param {Object} options - Query options
|
|
*/
|
|
async function hasRole(ctx, collection, options) {
|
|
const models = Self.app.models;
|
|
const myUserId = ctx.req.accessToken.userId;
|
|
|
|
const readRole = collection.readRole() && collection.readRole().name;
|
|
const writeRole = collection.writeRole() && collection.writeRole().name;
|
|
const requiredRole = readRole || writeRole;
|
|
|
|
const hasRequiredRole = await models.VnUser.hasRole(myUserId, requiredRole, options);
|
|
const isRoot = await models.VnUser.hasRole(myUserId, 'root', options);
|
|
|
|
if (isRoot || hasRequiredRole)
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
};
|