@backstage-community/plugin-rbac-backend
Version:
102 lines (99 loc) • 2.95 kB
JavaScript
;
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