The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Rocket.Chat/packages/rocketchat-authorization/server/models/Roles.js

69 lines
1.9 KiB

class ModelRoles extends RocketChat.models._Base {
constructor() {
super(...arguments);
this.tryEnsureIndex({ 'name': 1 });
this.tryEnsureIndex({ 'scope': 1 });
}
findUsersInRole(name, scope, options) {
const role = this.findOne(name);
const roleScope = (role && role.scope) || 'Users';
const model = RocketChat.models[roleScope];
return model && model.findUsersInRoles && model.findUsersInRoles(name, scope, options);
}
isUserInRoles(userId, roles, scope) {
roles = [].concat(roles);
return roles.some((roleName) => {
const role = this.findOne(roleName);
const roleScope = (role && role.scope) || 'Users';
const model = RocketChat.models[roleScope];
return model && model.isUserInRole && model.isUserInRole(userId, roleName, scope);
});
}
createOrUpdate(name, scope = 'Users', description, protectedRole) {
const updateData = {};
updateData.name = name;
updateData.scope = scope;
if (description != null) {
updateData.description = description;
}
if (protectedRole) {
updateData.protected = protectedRole;
}
this.upsert({ _id: name }, { $set: updateData });
}
addUserRoles(userId, roles, scope) {
roles = [].concat(roles);
for (const roleName of roles) {
const role = this.findOne(roleName);
const roleScope = (role && role.scope) || 'Users';
const model = RocketChat.models[roleScope];
model && model.addRolesByUserId && model.addRolesByUserId(userId, roleName, scope);
}
return true;
}
removeUserRoles(userId, roles, scope) {
roles = [].concat(roles);
for (const roleName of roles) {
const role = this.findOne(roleName);
const roleScope = (role && role.scope) || 'Users';
const model = RocketChat.models[roleScope];
model && model.removeRolesByUserId && model.removeRolesByUserId(userId, roleName, scope);
}
return true;
}
}
RocketChat.models.Roles = new ModelRoles('roles');