Skip to content

Commit f007231

Browse files
committed
- Sort permissions by group
- Do not try to create permissions for hidden settings in higher-level-callbacks - Remove `setting-permissions` collection - fully integrated into `permissions`
1 parent a7fdc87 commit f007231

File tree

5 files changed

+24
-39
lines changed

5 files changed

+24
-39
lines changed

packages/rocketchat-authorization/client/lib/SettingPermissions.js

-8
This file was deleted.

packages/rocketchat-authorization/client/views/permissions.js

+13-3
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,26 @@ Template.permissions.helpers({
1313
},
1414

1515
permissions() {
16-
return ChatPermissions.find(whereNotSetting,
16+
return ChatPermissions.find(whereNotSetting, //the $where seems to have no effect - filtered as workaround after fetch()
1717
{
1818
sort: {
1919
_id: 1
2020
}
21-
}).fetch().filter((setting)=>!setting.level);
21+
}).fetch()
22+
.filter((setting) => !setting.level);
2223
},
2324

2425
settingPermissions() {
25-
return ChatPermissions.find({level: permissionLevel.SETTING});
26+
return ChatPermissions.find({
27+
level: permissionLevel.SETTING
28+
},
29+
{
30+
sort: { //sorting seems not to be copied from the publication, we need to request it explicitly in find()
31+
group: 1,
32+
section: 1
33+
}
34+
}).fetch()
35+
.filter((setting) => setting.group); //group permissions are assigned implicitly, we can hide them. $exists: {group:false} not supported by Minimongo
2636
},
2737

2838
hasPermission() {

packages/rocketchat-authorization/package.js

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ Package.onUse(function(api) {
2121
api.addFiles('lib/rocketchat.js', ['server', 'client']);
2222

2323
api.addFiles('client/lib/ChatPermissions.js', ['client']);
24-
api.addFiles('client/lib/SettingPermissions.js', ['client']);
2524
api.addFiles('client/lib/models/Roles.js', ['client']);
2625
api.addFiles('client/lib/models/Users.js', ['client']);
2726
api.addFiles('client/lib/models/Subscriptions.js', ['client']);

packages/rocketchat-authorization/server/publications/permissions.js

-24
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,6 @@ Meteor.methods({
2020
};
2121
}
2222

23-
return records;
24-
},
25-
'setting-permissions/get'(updatedAt) {
26-
this.unblock();
27-
28-
const records = RocketChat.models.Permissions.find({
29-
level: permissionLevel.SETTING,
30-
groupPermissionId: {$exists: true} //filter group permissions themselves, as they are being assigned implicitly
31-
}, {}, {sort: {group: 1, section: 1, sorter: 1}}).fetch();
32-
33-
if (updatedAt instanceof Date) {
34-
return {
35-
update: records.filter((record) => {
36-
return record._updatedAt > updatedAt;
37-
}),
38-
remove: RocketChat.models.Permissions.trashFindDeletedAfter(updatedAt, {}, {
39-
fields: {
40-
_id: 1,
41-
_deletedAt: 1
42-
}
43-
}).fetch()
44-
};
45-
}
46-
4723
return records;
4824
}
4925
});

packages/rocketchat-authorization/server/startup.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -124,9 +124,11 @@ Meteor.startup(function() {
124124
const permission = {
125125
_id: permissionId,
126126
level: permissionLevel.SETTING,
127+
//copy those setting-properties which are needed to properly publish the setting-based permissions
127128
settingId: setting._id,
128129
group: setting.group,
129-
section: setting.section
130+
section: setting.section,
131+
sorter: setting.sorter
130132
};
131133
// copy previously assigned roles if available
132134
if (previousSettingPermissions[permissionId] && previousSettingPermissions[permissionId].roles) {
@@ -166,8 +168,14 @@ Meteor.startup(function() {
166168
// register a callback for settings for be create in higher-level-packages
167169
const createPermissionForAddedSetting = function(settingId) {
168170
const previousSettingPermissions = getPreviousPermissions(settingId);
169-
const setting = RocketChat.models.Settings.findOneNotHiddenById(settingId);
170-
createSettingPermission(setting, previousSettingPermissions);
171+
const setting = RocketChat.models.Settings.findOneById(settingId);
172+
if (setting) {
173+
if (!setting.hidden) {
174+
createSettingPermission(setting, previousSettingPermissions);
175+
}
176+
} else {
177+
SystemLogger.error('Could not create permission for setting', settingId);
178+
}
171179
};
172180

173181
RocketChat.settings.onload('*', createPermissionForAddedSetting);

0 commit comments

Comments
 (0)