@softvisio/core
Version:
Softisio core
126 lines (103 loc) • 4.03 kB
JavaScript
import sql from "#lib/sql";
export default Super =>
class extends Super {
// public
async [ "API_get-acl-users-list" ] ( ctx, options ) {
const from = [ "user", "acl_user" ];
const where = sql.where( `
acl_user.acl_id = ${ options.where.acl_id[ 1 ] }
AND acl_user.user_id = "user".id
` );
if ( options.where.enabled ) {
where.and( { "acl_user.enabled": options.where.enabled } );
}
if ( options.where.email ) {
where.and( { '"user".email': options.where.email } );
}
if ( options.where.roles ) {
from.push( "acl_user_role" );
where.and( sql`
acl_user_role.acl_id = acl_user.acl_id AND acl_user_role.user_id = acl_user.user_id
AND acl_user_role.acl_role_id IN (
SELECT
acl_role.id
FROM
acl_role,
acl
WHERE
acl_role.enabled
AND acl_role.role`.IN( options.where.roles[ 1 ] ).sql`
AND acl.acl_type_id = acl_role.acl_type_id
AND acl.id = ${ options.where.acl_id[ 1 ] }
)
` );
}
const query = sql`
WITH cte AS (
SELECT DISTINCT
acl_user.user_id
`
.FROM( from )
.WHERE( where ).sql`
)
SELECT
acl_user.user_id AS id,
acl_user.acl_id AS acl_id,
"user".email AS email,
${ this.api.config.avatarUrl } || "user".id AS avatar_url,
acl_user.created,
acl_user.enabled,
acl_user_roles( acl_user.acl_id, acl_user.user_id ) as roles,
acl_user_editable(
_acl_id => acl_user.acl_id,
_acl_user_id => acl_user.user_id,
_parent_user_id => ${ ctx.user.id }
) AS editable
FROM
cte,
"user",
acl_user
WHERE
acl_user.acl_id = ${ options.where.acl_id[ 1 ] }
AND acl_user.user_id = cte.user_id
AND "user".id = acl_user.user_id
`;
return this._read( ctx, query, { options } );
}
async [ "API_suggest-acl-users" ] ( ctx, options ) {
return this.app.acl.suggestAclUsers( options.where.acl_id[ 1 ], options.where.email?.[ 1 ], ctx.user.id );
}
async [ "API_add-acl-user" ] ( ctx, aclId, userId, { enabled, roles } = {} ) {
return this.app.acl.addAclUser( aclId, userId, { enabled, roles, "parentUserId": ctx.user.id } );
}
async [ "API_delete-acl-user" ] ( ctx, aclId, userId ) {
return this.app.acl.deleteAclUser( aclId, userId, { "parentUserId": ctx.user.id } );
}
async [ "API_set-acl-user-enabled" ] ( ctx, aclId, userId, enabled ) {
return this.app.acl.setAclUserEnabled( aclId, userId, enabled, { "parentUserId": ctx.user.id } );
}
async [ "API_set-acl-user-roles" ] ( ctx, aclId, userId, roles ) {
return this.app.acl.setAclUserRoles( aclId, userId, roles, { "parentUserId": ctx.user.id } );
}
async [ "API_add-acl-user-roles" ] ( ctx, aclId, userId, roles ) {
return this.app.acl.addAclUserRoles( aclId, userId, roles, { "parentUserId": ctx.user.id } );
}
async [ "API_delete-acl-user-roles" ] ( ctx, aclId, userId, roles ) {
return this.app.acl.deleteAclUserRoles( aclId, userId, roles, { "parentUserId": ctx.user.id } );
}
async [ "API_get-acl-user-roles" ] ( ctx, aclId, userId ) {
return this.app.acl.getAclUserRoles( aclId, userId, { "parentUserId": ctx.user.id } );
}
async [ "API_get-acl-user-permissions" ] ( ctx, aclId, userId ) {
const permissions = await this.app.acl.getAclUserPermissions( aclId, userId || ctx.user.id );
if ( !permissions ) {
return result( [ 400, "Unable to get ACL user permissions" ] );
}
else {
return result( 200, permissions );
}
}
async [ "API_get-acl-roles" ] ( ctx, aclId ) {
return this.app.acl.getAclRoles( aclId );
}
};