UNPKG

@backstage-community/plugin-rbac-backend

Version:
102 lines (99 loc) 2.95 kB
'use strict'; class RoleMemberList { name; members; roles; constructor(name) { this.name = name; this.members = []; this.roles = []; } /** * addMembers will add members to the RoleMemberList * @param members The members to be added. */ addMembers(members) { this.members = members; } /** * addMember will add a single member to the RoleMemberList, skips adding the user in the * event that they already exist in the members array. * @param member The member to be added. */ addMember(member) { if (this.members.some((n) => n === member)) { return; } this.members.push(member); } /** * hasMember will check if a particular member exists in the members array. * @param name The member to be checked for. */ hasMember(name) { return this.members.includes(name); } /** * deleteMember will remove a user from the members array. * @param member The member to be removed. */ deleteMember(member) { this.members = this.members.filter((n) => n !== member); } /** * buildMembers will query the `casbin_rule` database table to ensure that the role * that we have cached is up to date. * This is important in multi node scenarios where the cached roles in role manager can become * out of sync with the database. * @param roleMemberList The RoleMemberList to be updated. * @param client The database client. */ async buildMembers(roleMemberList, client) { try { const members = await client.table("casbin_rule").where("v1", this.name).pluck("v0").distinct(); roleMemberList.addMembers(members); } catch (error) { throw new Error( `Unable to find members for the role ${this.name}. Cause: ${error}` ); } } /** * getMembers will return the members of the RoleMemberList * @returns The members. */ getMembers() { return this.members; } /** * addRoles will add roles to the RoleMemberList * @param roles The roles to be added. */ addRoles(roles) { this.roles = roles; } /** * buildRoles will query the `casbin_rule` database table to quickly grab all of the * roles that a particular user is attached to. * @param roleMemberList The RoleMemberList to be updated. * @param userAndGroups The user and groups to query with. * @param client The database client. */ async buildRoles(roleMemberList, userAndGroups, client) { try { const roles = await client.table("casbin_rule").where("ptype", "g").whereIn("v0", userAndGroups).pluck("v1").distinct(); roleMemberList.addRoles(roles); } catch (error) { throw new Error(`Unable to find all roles. Cause: ${error}`); } } /** * getRoles will return the roles of the RoleMemberList. * @returns The roles. */ getRoles() { return this.roles; } } exports.RoleMemberList = RoleMemberList; //# sourceMappingURL=member-list.cjs.js.map