Skip to content

Commit b8a71a0

Browse files
Marcos Spessatto Defendirenatobecker
andauthored
[NEW] Add permissions to deal with Omnichannel custom fields (#17567)
* Add permissions to deal with omnichannel custom fields * Apply suggestions from review Co-authored-by: Renato Becker <[email protected]>
1 parent e54e3ce commit b8a71a0

File tree

7 files changed

+174
-151
lines changed

7 files changed

+174
-151
lines changed

app/authorization/server/startup.js

Lines changed: 100 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -12,105 +12,107 @@ Meteor.startup(function() {
1212
// then we can define edit-<type>-message instead of edit-message
1313
// 2. admin, moderator, and user roles should not be deleted as they are referened in the code.
1414
const permissions = [
15-
{ _id: 'access-permissions', roles: ['admin'] },
16-
{ _id: 'access-setting-permissions', roles: ['admin'] },
17-
{ _id: 'add-oauth-service', roles: ['admin'] },
18-
{ _id: 'add-user-to-joined-room', roles: ['admin', 'owner', 'moderator'] },
19-
{ _id: 'add-user-to-any-c-room', roles: ['admin'] },
20-
{ _id: 'add-user-to-any-p-room', roles: [] },
21-
{ _id: 'api-bypass-rate-limit', roles: ['admin', 'bot', 'app'] },
22-
{ _id: 'archive-room', roles: ['admin', 'owner'] },
23-
{ _id: 'assign-admin-role', roles: ['admin'] },
24-
{ _id: 'assign-roles', roles: ['admin'] },
25-
{ _id: 'ban-user', roles: ['admin', 'owner', 'moderator'] },
26-
{ _id: 'bulk-register-user', roles: ['admin'] },
27-
{ _id: 'create-c', roles: ['admin', 'user', 'bot', 'app'] },
28-
{ _id: 'create-d', roles: ['admin', 'user', 'bot', 'app'] },
29-
{ _id: 'create-p', roles: ['admin', 'user', 'bot', 'app'] },
30-
{ _id: 'create-personal-access-tokens', roles: ['admin', 'user'] },
31-
{ _id: 'create-user', roles: ['admin'] },
32-
{ _id: 'clean-channel-history', roles: ['admin'] },
33-
{ _id: 'delete-c', roles: ['admin', 'owner'] },
34-
{ _id: 'delete-d', roles: ['admin'] },
35-
{ _id: 'delete-message', roles: ['admin', 'owner', 'moderator'] },
36-
{ _id: 'delete-own-message', roles: ['admin', 'user'] },
37-
{ _id: 'delete-p', roles: ['admin', 'owner'] },
38-
{ _id: 'delete-user', roles: ['admin'] },
39-
{ _id: 'edit-message', roles: ['admin', 'owner', 'moderator'] },
40-
{ _id: 'edit-other-user-active-status', roles: ['admin'] },
41-
{ _id: 'edit-other-user-info', roles: ['admin'] },
42-
{ _id: 'edit-other-user-password', roles: ['admin'] },
43-
{ _id: 'edit-other-user-avatar', roles: ['admin'] },
44-
{ _id: 'edit-privileged-setting', roles: ['admin'] },
45-
{ _id: 'edit-room', roles: ['admin', 'owner', 'moderator'] },
46-
{ _id: 'edit-room-retention-policy', roles: ['admin'] },
47-
{ _id: 'force-delete-message', roles: ['admin', 'owner'] },
48-
{ _id: 'join-without-join-code', roles: ['admin', 'bot', 'app'] },
49-
{ _id: 'leave-c', roles: ['admin', 'user', 'bot', 'anonymous', 'app'] },
50-
{ _id: 'leave-p', roles: ['admin', 'user', 'bot', 'anonymous', 'app'] },
51-
{ _id: 'manage-assets', roles: ['admin'] },
52-
{ _id: 'manage-emoji', roles: ['admin'] },
53-
{ _id: 'manage-user-status', roles: ['admin'] },
54-
{ _id: 'manage-outgoing-integrations', roles: ['admin'] },
55-
{ _id: 'manage-incoming-integrations', roles: ['admin'] },
56-
{ _id: 'manage-own-outgoing-integrations', roles: ['admin'] },
57-
{ _id: 'manage-own-incoming-integrations', roles: ['admin'] },
58-
{ _id: 'manage-oauth-apps', roles: ['admin'] },
59-
{ _id: 'manage-selected-settings', roles: ['admin'] },
60-
{ _id: 'mention-all', roles: ['admin', 'owner', 'moderator', 'user'] },
61-
{ _id: 'mention-here', roles: ['admin', 'owner', 'moderator', 'user'] },
62-
{ _id: 'mute-user', roles: ['admin', 'owner', 'moderator'] },
63-
{ _id: 'remove-user', roles: ['admin', 'owner', 'moderator'] },
64-
{ _id: 'run-import', roles: ['admin'] },
65-
{ _id: 'run-migration', roles: ['admin'] },
66-
{ _id: 'set-moderator', roles: ['admin', 'owner'] },
67-
{ _id: 'set-owner', roles: ['admin', 'owner'] },
68-
{ _id: 'send-many-messages', roles: ['admin', 'bot', 'app'] },
69-
{ _id: 'set-leader', roles: ['admin', 'owner'] },
70-
{ _id: 'unarchive-room', roles: ['admin'] },
71-
{ _id: 'view-c-room', roles: ['admin', 'user', 'bot', 'app', 'anonymous'] },
72-
{ _id: 'user-generate-access-token', roles: ['admin'] },
73-
{ _id: 'view-d-room', roles: ['admin', 'user', 'bot', 'app', 'guest'] },
74-
{ _id: 'view-full-other-user-info', roles: ['admin'] },
75-
{ _id: 'view-history', roles: ['admin', 'user', 'anonymous'] },
76-
{ _id: 'view-joined-room', roles: ['guest', 'bot', 'app', 'anonymous'] },
77-
{ _id: 'view-join-code', roles: ['admin'] },
78-
{ _id: 'view-logs', roles: ['admin'] },
79-
{ _id: 'view-other-user-channels', roles: ['admin'] },
80-
{ _id: 'view-p-room', roles: ['admin', 'user', 'anonymous', 'guest'] },
81-
{ _id: 'view-privileged-setting', roles: ['admin'] },
82-
{ _id: 'view-room-administration', roles: ['admin'] },
83-
{ _id: 'view-statistics', roles: ['admin'] },
84-
{ _id: 'view-user-administration', roles: ['admin'] },
85-
{ _id: 'preview-c-room', roles: ['admin', 'user', 'anonymous'] },
86-
{ _id: 'view-outside-room', roles: ['admin', 'owner', 'moderator', 'user'] },
87-
{ _id: 'view-broadcast-member-list', roles: ['admin', 'owner', 'moderator'] },
88-
{ _id: 'call-management', roles: ['admin', 'owner', 'moderator'] },
89-
{ _id: 'create-invite-links', roles: ['admin', 'owner', 'moderator'] },
90-
{ _id: 'view-l-room', roles: ['livechat-agent', 'livechat-manager', 'admin'] },
91-
{ _id: 'view-livechat-manager', roles: ['livechat-manager', 'admin'] },
92-
{ _id: 'view-livechat-rooms', roles: ['livechat-manager', 'admin'] },
93-
{ _id: 'close-livechat-room', roles: ['livechat-agent', 'livechat-manager', 'admin'] },
94-
{ _id: 'close-others-livechat-room', roles: ['livechat-manager', 'admin'] },
95-
{ _id: 'save-others-livechat-room-info', roles: ['livechat-manager'] },
96-
{ _id: 'remove-closed-livechat-rooms', roles: ['livechat-manager', 'admin'] },
97-
{ _id: 'view-livechat-analytics', roles: ['livechat-manager', 'admin'] },
98-
{ _id: 'view-livechat-queue', roles: ['livechat-manager', 'admin'] },
99-
{ _id: 'transfer-livechat-guest', roles: ['livechat-manager', 'admin'] },
100-
{ _id: 'manage-livechat-managers', roles: ['livechat-manager', 'admin'] },
101-
{ _id: 'manage-livechat-agents', roles: ['livechat-manager', 'admin'] },
102-
{ _id: 'manage-livechat-departments', roles: ['livechat-manager', 'admin'] },
103-
{ _id: 'view-livechat-departments', roles: ['livechat-manager', 'admin'] },
104-
{ _id: 'add-livechat-department-agents', roles: ['livechat-manager', 'admin'] },
105-
{ _id: 'view-livechat-current-chats', roles: ['livechat-manager', 'admin'] },
15+
{ _id: 'access-permissions', roles: ['admin'] },
16+
{ _id: 'access-setting-permissions', roles: ['admin'] },
17+
{ _id: 'add-oauth-service', roles: ['admin'] },
18+
{ _id: 'add-user-to-joined-room', roles: ['admin', 'owner', 'moderator'] },
19+
{ _id: 'add-user-to-any-c-room', roles: ['admin'] },
20+
{ _id: 'add-user-to-any-p-room', roles: [] },
21+
{ _id: 'api-bypass-rate-limit', roles: ['admin', 'bot', 'app'] },
22+
{ _id: 'archive-room', roles: ['admin', 'owner'] },
23+
{ _id: 'assign-admin-role', roles: ['admin'] },
24+
{ _id: 'assign-roles', roles: ['admin'] },
25+
{ _id: 'ban-user', roles: ['admin', 'owner', 'moderator'] },
26+
{ _id: 'bulk-register-user', roles: ['admin'] },
27+
{ _id: 'create-c', roles: ['admin', 'user', 'bot', 'app'] },
28+
{ _id: 'create-d', roles: ['admin', 'user', 'bot', 'app'] },
29+
{ _id: 'create-p', roles: ['admin', 'user', 'bot', 'app'] },
30+
{ _id: 'create-personal-access-tokens', roles: ['admin', 'user'] },
31+
{ _id: 'create-user', roles: ['admin'] },
32+
{ _id: 'clean-channel-history', roles: ['admin'] },
33+
{ _id: 'delete-c', roles: ['admin', 'owner'] },
34+
{ _id: 'delete-d', roles: ['admin'] },
35+
{ _id: 'delete-message', roles: ['admin', 'owner', 'moderator'] },
36+
{ _id: 'delete-own-message', roles: ['admin', 'user'] },
37+
{ _id: 'delete-p', roles: ['admin', 'owner'] },
38+
{ _id: 'delete-user', roles: ['admin'] },
39+
{ _id: 'edit-message', roles: ['admin', 'owner', 'moderator'] },
40+
{ _id: 'edit-other-user-active-status', roles: ['admin'] },
41+
{ _id: 'edit-other-user-info', roles: ['admin'] },
42+
{ _id: 'edit-other-user-password', roles: ['admin'] },
43+
{ _id: 'edit-other-user-avatar', roles: ['admin'] },
44+
{ _id: 'edit-privileged-setting', roles: ['admin'] },
45+
{ _id: 'edit-room', roles: ['admin', 'owner', 'moderator'] },
46+
{ _id: 'edit-room-retention-policy', roles: ['admin'] },
47+
{ _id: 'force-delete-message', roles: ['admin', 'owner'] },
48+
{ _id: 'join-without-join-code', roles: ['admin', 'bot', 'app'] },
49+
{ _id: 'leave-c', roles: ['admin', 'user', 'bot', 'anonymous', 'app'] },
50+
{ _id: 'leave-p', roles: ['admin', 'user', 'bot', 'anonymous', 'app'] },
51+
{ _id: 'manage-assets', roles: ['admin'] },
52+
{ _id: 'manage-emoji', roles: ['admin'] },
53+
{ _id: 'manage-user-status', roles: ['admin'] },
54+
{ _id: 'manage-outgoing-integrations', roles: ['admin'] },
55+
{ _id: 'manage-incoming-integrations', roles: ['admin'] },
56+
{ _id: 'manage-own-outgoing-integrations', roles: ['admin'] },
57+
{ _id: 'manage-own-incoming-integrations', roles: ['admin'] },
58+
{ _id: 'manage-oauth-apps', roles: ['admin'] },
59+
{ _id: 'manage-selected-settings', roles: ['admin'] },
60+
{ _id: 'mention-all', roles: ['admin', 'owner', 'moderator', 'user'] },
61+
{ _id: 'mention-here', roles: ['admin', 'owner', 'moderator', 'user'] },
62+
{ _id: 'mute-user', roles: ['admin', 'owner', 'moderator'] },
63+
{ _id: 'remove-user', roles: ['admin', 'owner', 'moderator'] },
64+
{ _id: 'run-import', roles: ['admin'] },
65+
{ _id: 'run-migration', roles: ['admin'] },
66+
{ _id: 'set-moderator', roles: ['admin', 'owner'] },
67+
{ _id: 'set-owner', roles: ['admin', 'owner'] },
68+
{ _id: 'send-many-messages', roles: ['admin', 'bot', 'app'] },
69+
{ _id: 'set-leader', roles: ['admin', 'owner'] },
70+
{ _id: 'unarchive-room', roles: ['admin'] },
71+
{ _id: 'view-c-room', roles: ['admin', 'user', 'bot', 'app', 'anonymous'] },
72+
{ _id: 'user-generate-access-token', roles: ['admin'] },
73+
{ _id: 'view-d-room', roles: ['admin', 'user', 'bot', 'app', 'guest'] },
74+
{ _id: 'view-full-other-user-info', roles: ['admin'] },
75+
{ _id: 'view-history', roles: ['admin', 'user', 'anonymous'] },
76+
{ _id: 'view-joined-room', roles: ['guest', 'bot', 'app', 'anonymous'] },
77+
{ _id: 'view-join-code', roles: ['admin'] },
78+
{ _id: 'view-logs', roles: ['admin'] },
79+
{ _id: 'view-other-user-channels', roles: ['admin'] },
80+
{ _id: 'view-p-room', roles: ['admin', 'user', 'anonymous', 'guest'] },
81+
{ _id: 'view-privileged-setting', roles: ['admin'] },
82+
{ _id: 'view-room-administration', roles: ['admin'] },
83+
{ _id: 'view-statistics', roles: ['admin'] },
84+
{ _id: 'view-user-administration', roles: ['admin'] },
85+
{ _id: 'preview-c-room', roles: ['admin', 'user', 'anonymous'] },
86+
{ _id: 'view-outside-room', roles: ['admin', 'owner', 'moderator', 'user'] },
87+
{ _id: 'view-broadcast-member-list', roles: ['admin', 'owner', 'moderator'] },
88+
{ _id: 'call-management', roles: ['admin', 'owner', 'moderator'] },
89+
{ _id: 'create-invite-links', roles: ['admin', 'owner', 'moderator'] },
90+
{ _id: 'view-l-room', roles: ['livechat-agent', 'livechat-manager', 'admin'] },
91+
{ _id: 'view-livechat-manager', roles: ['livechat-manager', 'admin'] },
92+
{ _id: 'view-livechat-rooms', roles: ['livechat-manager', 'admin'] },
93+
{ _id: 'close-livechat-room', roles: ['livechat-agent', 'livechat-manager', 'admin'] },
94+
{ _id: 'close-others-livechat-room', roles: ['livechat-manager', 'admin'] },
95+
{ _id: 'save-others-livechat-room-info', roles: ['livechat-manager'] },
96+
{ _id: 'remove-closed-livechat-rooms', roles: ['livechat-manager', 'admin'] },
97+
{ _id: 'view-livechat-analytics', roles: ['livechat-manager', 'admin'] },
98+
{ _id: 'view-livechat-queue', roles: ['livechat-manager', 'admin'] },
99+
{ _id: 'transfer-livechat-guest', roles: ['livechat-manager', 'admin'] },
100+
{ _id: 'manage-livechat-managers', roles: ['livechat-manager', 'admin'] },
101+
{ _id: 'manage-livechat-agents', roles: ['livechat-manager', 'admin'] },
102+
{ _id: 'manage-livechat-departments', roles: ['livechat-manager', 'admin'] },
103+
{ _id: 'view-livechat-departments', roles: ['livechat-manager', 'admin'] },
104+
{ _id: 'add-livechat-department-agents', roles: ['livechat-manager', 'admin'] },
105+
{ _id: 'view-livechat-current-chats', roles: ['livechat-manager', 'admin'] },
106106
{ _id: 'view-livechat-real-time-monitoring', roles: ['livechat-manager', 'admin'] },
107-
{ _id: 'view-livechat-triggers', roles: ['livechat-manager', 'admin'] },
108-
{ _id: 'view-livechat-customfields', roles: ['livechat-manager', 'admin'] },
109-
{ _id: 'view-livechat-installation', roles: ['livechat-manager', 'admin'] },
110-
{ _id: 'view-livechat-appearance', roles: ['livechat-manager', 'admin'] },
111-
{ _id: 'view-livechat-webhooks', roles: ['livechat-manager', 'admin'] },
112-
{ _id: 'view-livechat-facebook', roles: ['livechat-manager', 'admin'] },
113-
{ _id: 'view-livechat-officeHours', roles: ['livechat-manager', 'admin'] },
107+
{ _id: 'view-livechat-triggers', roles: ['livechat-manager', 'admin'] },
108+
{ _id: 'view-livechat-customfields', roles: ['livechat-manager', 'admin'] },
109+
{ _id: 'view-livechat-installation', roles: ['livechat-manager', 'admin'] },
110+
{ _id: 'view-livechat-appearance', roles: ['livechat-manager', 'admin'] },
111+
{ _id: 'view-livechat-webhooks', roles: ['livechat-manager', 'admin'] },
112+
{ _id: 'view-livechat-facebook', roles: ['livechat-manager', 'admin'] },
113+
{ _id: 'view-livechat-officeHours', roles: ['livechat-manager', 'admin'] },
114+
{ _id: 'view-livechat-room-customfields', roles: ['livechat-manager', 'livechat-agent', 'admin'] },
115+
{ _id: 'edit-livechat-room-customfields', roles: ['livechat-manager', 'livechat-agent', 'admin'] },
114116
];
115117

116118
for (const permission of permissions) {

app/livechat/client/views/app/tabbar/visitorEdit.html

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,18 @@ <h3>{{username}}</h3>
3131
</label>
3232
</div>
3333

34-
{{#each visitorCustomFields}}
35-
<div class="rc-input rc-form-group rc-form-group--small">
36-
<label class="rc-input__label">
37-
<div class="rc-input__title">{{label}}</div>
38-
<div class="rc-input__wrapper">
39-
<input class="rc-input__element" type="text" name="{{name}}" autocomplete="off" data-visitorLivechatData="true" value="{{value}}">
40-
</div>
41-
</label>
42-
</div>
43-
{{/each}}
34+
{{#if canViewCustomFields }}
35+
{{#each visitorCustomFields}}
36+
<div class="rc-input rc-form-group rc-form-group--small">
37+
<label class="rc-input__label">
38+
<div class="rc-input__title">{{label}}</div>
39+
<div class="rc-input__wrapper">
40+
<input class="rc-input__element" type="text" name="{{name}}" autocomplete="off" data-visitorLivechatData="true" value="{{value}}" disabled="{{canOnlyViewCustomFields}}">
41+
</div>
42+
</label>
43+
</div>
44+
{{/each}}
45+
{{/if}}
4446
{{/with}}
4547

4648
{{#with room}}
@@ -91,17 +93,18 @@ <h3>{{_ "Conversation" }}</h3>
9193
{{/each}}
9294
</ul>
9395
</div>
94-
95-
{{#each roomCustomFields}}
96-
<div class="rc-input rc-form-group rc-form-group--small">
97-
<label class="rc-input__label">
98-
<div class="rc-input__title">{{label}}</div>
99-
<div class="rc-input__wrapper">
100-
<input class="rc-input__element" type="text" name="{{name}}" autocomplete="off" data-roomLivechatData="true" value="{{value}}">
101-
</div>
102-
</label>
103-
</div>
104-
{{/each}}
96+
{{#if canViewCustomFields }}
97+
{{#each roomCustomFields}}
98+
<div class="rc-input rc-form-group rc-form-group--small">
99+
<label class="rc-input__label">
100+
<div class="rc-input__title">{{label}}</div>
101+
<div class="rc-input__wrapper">
102+
<input class="rc-input__element" type="text" name="{{name}}" autocomplete="off" data-roomLivechatData="true" value="{{value}}" disabled="{{canOnlyViewCustomFields}}">
103+
</div>
104+
</label>
105+
</div>
106+
{{/each}}
107+
{{/if}}
105108
{{/with}}
106109

107110
<div class="rc-user-info__flex rc-user-info__row">

app/livechat/client/views/app/tabbar/visitorEdit.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Template } from 'meteor/templating';
44
import toastr from 'toastr';
55

66
import { t } from '../../../../../utils';
7-
import { hasRole } from '../../../../../authorization';
7+
import { hasAtLeastOnePermission, hasPermission, hasRole } from '../../../../../authorization';
88
import './visitorEdit.html';
99
import { APIClient } from '../../../../../utils/client';
1010
import { getCustomFormTemplate } from '../customTemplates/register';
@@ -16,6 +16,14 @@ Template.visitorEdit.helpers({
1616
return Template.instance().visitor.get();
1717
},
1818

19+
canViewCustomFields() {
20+
return hasAtLeastOnePermission(['view-livechat-room-customfields', 'edit-livechat-room-customfields']);
21+
},
22+
23+
canOnlyViewCustomFields() {
24+
return hasPermission('view-livechat-room-customfields') && !hasPermission('edit-livechat-room-customfields');
25+
},
26+
1927
visitorCustomFields() {
2028
const customFields = Template.instance().customFields.get();
2129
if (!customFields || customFields.length === 0) {

app/livechat/client/views/app/tabbar/visitorInfo.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ Template.visitorInfo.helpers({
9393

9494
customVisitorFields() {
9595
const customFields = Template.instance().customFields.get();
96+
if (!hasAtLeastOnePermission(['view-livechat-room-customfields', 'edit-livechat-room-customfields'])) {
97+
return;
98+
}
9699
if (!customFields || customFields.length === 0) {
97100
return [];
98101
}

0 commit comments

Comments
 (0)