[IMPROVE] Replace roles publication by REST (#15910)

pull/16006/head^2
Marcos Spessatto Defendi 6 years ago committed by Diego Sampaio
parent c439d9e0d4
commit bb842f2e4d
  1. 3
      app/authorization/client/lib/streamer.js
  2. 16
      app/authorization/client/startup.js
  3. 2
      app/authorization/client/views/permissionsRole.js
  4. 5
      app/authorization/server/lib/streamer.js
  5. 11
      app/authorization/server/methods/deleteRole.js
  6. 6
      app/authorization/server/methods/saveRole.js
  7. 1
      app/authorization/server/publications/roles.js
  8. 2
      app/models/client/models/Roles.js

@ -0,0 +1,3 @@
import { Meteor } from 'meteor/meteor';
export const rolesStreamer = new Meteor.Streamer('roles');

@ -3,9 +3,15 @@ import { Meteor } from 'meteor/meteor';
import { hasAtLeastOnePermission } from './hasPermission';
import { CachedCollectionManager } from '../../ui-cached-collection';
import { AdminBox } from '../../ui-utils/client/lib/AdminBox';
import { APIClient } from '../../utils/client';
import { Roles } from '../../models/client';
import { rolesStreamer } from './lib/streamer';
Meteor.startup(() => {
CachedCollectionManager.onLogin(() => Meteor.subscribe('roles'));
CachedCollectionManager.onLogin(async () => {
const { roles } = await APIClient.v1.get('roles.list');
roles.forEach((role) => Roles.insert(role));
});
AdminBox.addOption({
href: 'admin-permissions',
@ -15,4 +21,12 @@ Meteor.startup(() => {
return hasAtLeastOnePermission(['access-permissions', 'access-setting-permissions']);
},
});
const events = {
changed: (role) => {
delete role.type;
Roles.upsert({ _id: role.name }, role);
},
removed: (role) => Roles.remove({ _id: role.name }),
};
rolesStreamer.on('roles', (role) => events[role.type](role));
});

@ -256,8 +256,6 @@ Template.permissionsRole.onCreated(async function() {
this.searchRoom = new ReactiveVar();
this.searchUsername = new ReactiveVar();
this.usersInRole = new ReactiveVar([]);
this.subscription = this.subscribe('roles', FlowRouter.getParam('name'));
});
Template.permissionsRole.onRendered(function() {

@ -0,0 +1,5 @@
import { Meteor } from 'meteor/meteor';
export const rolesStreamer = new Meteor.Streamer('roles');
rolesStreamer.allowWrite('none');
rolesStreamer.allowRead('logged');

@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor';
import * as Models from '../../../models/server';
import { hasPermission } from '../functions/hasPermission';
import { rolesStreamer } from '../lib/streamer';
Meteor.methods({
'authorization:deleteRole'(roleName) {
@ -34,7 +35,13 @@ Meteor.methods({
method: 'authorization:deleteRole',
});
}
return Models.Roles.remove(role.name);
const removed = Models.Roles.remove(role.name);
if (removed) {
rolesStreamer.emit('roles', {
type: 'removed',
name: roleName,
});
}
return removed;
},
});

@ -4,6 +4,7 @@ import { Roles } from '../../../models/server';
import { settings } from '../../../settings/server';
import { Notifications } from '../../../notifications/server';
import { hasPermission } from '../functions/hasPermission';
import { rolesStreamer } from '../lib/streamer';
Meteor.methods({
'authorization:saveRole'(roleData) {
@ -31,7 +32,10 @@ Meteor.methods({
_id: roleData.name,
});
}
rolesStreamer.emit('roles', {
type: 'changed',
...roleData,
});
return update;
},
});

@ -4,6 +4,7 @@ import { Roles } from '../../../models';
import { clearCache } from '../functions/hasPermission';
Meteor.publish('roles', function() {
console.warn('The publication "roles" is deprecated and will be removed after version v3.0.0');
if (!this.userId) {
return this.ready();
}

@ -2,7 +2,7 @@ import { Mongo } from 'meteor/mongo';
import * as Models from '..';
const Roles = new Mongo.Collection('rocketchat_roles');
const Roles = new Mongo.Collection(null);
Object.assign(Roles, {
findUsersInRole(name, scope, options) {

Loading…
Cancel
Save