PLT-5080 (WebApp): Channel Admin permission level. (#5047)
* PLT-5080 (WebApp): Channel Admin permission level. For channel management and channel deletion. * Fix some incorrect showing/hiding of options. * Remove incorrect client calls that was overwriting my channel members.
Этот коммит содержится в:
коммит произвёл
Christopher Speller
родитель
bc9f3dfa24
Коммит
8509c2f0b0
@@ -132,7 +132,6 @@ export function makeUserChannelAdmin(channelId, userId, success, error) {
|
|||||||
userId,
|
userId,
|
||||||
'channel_user channel_admin',
|
'channel_user channel_admin',
|
||||||
() => {
|
() => {
|
||||||
AsyncClient.getChannelMember(channelId, userId);
|
|
||||||
getChannelMembersForUserIds(channelId, [userId]);
|
getChannelMembersForUserIds(channelId, [userId]);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
@@ -153,7 +152,6 @@ export function makeUserChannelMember(channelId, userId, success, error) {
|
|||||||
userId,
|
userId,
|
||||||
'channel_user',
|
'channel_user',
|
||||||
() => {
|
() => {
|
||||||
AsyncClient.getChannelMember(channelId, userId);
|
|
||||||
getChannelMembersForUserIds(channelId, [userId]);
|
getChannelMembersForUserIds(channelId, [userId]);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ export default class PolicySettings extends AdminSettings {
|
|||||||
id='restrictPublicChannelManagement'
|
id='restrictPublicChannelManagement'
|
||||||
values={[
|
values={[
|
||||||
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
||||||
|
{value: Constants.PERMISSIONS_CHANNEL_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsChannelAdmin', 'Channel, Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
||||||
]}
|
]}
|
||||||
@@ -137,6 +138,7 @@ export default class PolicySettings extends AdminSettings {
|
|||||||
id='restrictPublicChannelDeletion'
|
id='restrictPublicChannelDeletion'
|
||||||
values={[
|
values={[
|
||||||
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
||||||
|
{value: Constants.PERMISSIONS_CHANNEL_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsChannelAdmin', 'Channel, Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
||||||
]}
|
]}
|
||||||
@@ -195,6 +197,7 @@ export default class PolicySettings extends AdminSettings {
|
|||||||
id='restrictPrivateChannelManagement'
|
id='restrictPrivateChannelManagement'
|
||||||
values={[
|
values={[
|
||||||
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
||||||
|
{value: Constants.PERMISSIONS_CHANNEL_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsChannelAdmin', 'Channel, Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
||||||
]}
|
]}
|
||||||
@@ -217,6 +220,7 @@ export default class PolicySettings extends AdminSettings {
|
|||||||
id='restrictPrivateChannelDeletion'
|
id='restrictPrivateChannelDeletion'
|
||||||
values={[
|
values={[
|
||||||
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
{value: Constants.PERMISSIONS_ALL, text: Utils.localizeMessage('admin.general.policy.permissionsAllChannel', 'All channel members')},
|
||||||
|
{value: Constants.PERMISSIONS_CHANNEL_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsChannelAdmin', 'Channel, Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
{value: Constants.PERMISSIONS_TEAM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsAdmin', 'Team and System Admins')},
|
||||||
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
{value: Constants.PERMISSIONS_SYSTEM_ADMIN, text: Utils.localizeMessage('admin.general.policy.permissionsSystemAdmin', 'System Admins')}
|
||||||
]}
|
]}
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ export default class ChannelHeader extends React.Component {
|
|||||||
let channelTitle = channel.display_name;
|
let channelTitle = channel.display_name;
|
||||||
const isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
|
const isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
|
||||||
const isSystemAdmin = UserStore.isSystemAdminForCurrentUser();
|
const isSystemAdmin = UserStore.isSystemAdminForCurrentUser();
|
||||||
|
const isChannelAdmin = ChannelStore.isChannelAdminForCurrentChannel();
|
||||||
const isDirect = (this.state.channel.type === 'D');
|
const isDirect = (this.state.channel.type === 'D');
|
||||||
let webrtc;
|
let webrtc;
|
||||||
|
|
||||||
@@ -476,7 +477,7 @@ export default class ChannelHeader extends React.Component {
|
|||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (ChannelUtils.showManagementOptions(channel, isAdmin, isSystemAdmin)) {
|
if (ChannelUtils.showManagementOptions(channel, isAdmin, isSystemAdmin, isChannelAdmin)) {
|
||||||
dropdownContents.push(
|
dropdownContents.push(
|
||||||
<li
|
<li
|
||||||
key='set_channel_header'
|
key='set_channel_header'
|
||||||
@@ -541,7 +542,7 @@ export default class ChannelHeader extends React.Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ChannelUtils.showDeleteOption(channel, isAdmin, isSystemAdmin)) {
|
if (ChannelUtils.showDeleteOption(channel, isAdmin, isSystemAdmin, isChannelAdmin)) {
|
||||||
if (!ChannelStore.isDefault(channel)) {
|
if (!ChannelStore.isDefault(channel)) {
|
||||||
dropdownContents.push(deleteOption);
|
dropdownContents.push(deleteOption);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ export default class Navbar extends React.Component {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
createDropdown(channel, channelTitle, isAdmin, isSystemAdmin, isDirect, popoverContent) {
|
createDropdown(channel, channelTitle, isAdmin, isSystemAdmin, isChannelAdmin, isDirect, popoverContent) {
|
||||||
if (channel) {
|
if (channel) {
|
||||||
let channelTerm = (
|
let channelTerm = (
|
||||||
<FormattedMessage
|
<FormattedMessage
|
||||||
@@ -346,7 +346,7 @@ export default class Navbar extends React.Component {
|
|||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
|
||||||
if (ChannelUtils.showManagementOptions(channel, isAdmin, isSystemAdmin)) {
|
if (ChannelUtils.showManagementOptions(channel, isAdmin, isSystemAdmin, isChannelAdmin)) {
|
||||||
setChannelHeaderOption = (
|
setChannelHeaderOption = (
|
||||||
<li role='presentation'>
|
<li role='presentation'>
|
||||||
<a
|
<a
|
||||||
@@ -402,7 +402,7 @@ export default class Navbar extends React.Component {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ChannelUtils.showDeleteOption(channel, isAdmin, isSystemAdmin) || this.state.userCount === 1) {
|
if (ChannelUtils.showDeleteOption(channel, isAdmin, isSystemAdmin, isChannelAdmin) || this.state.userCount === 1) {
|
||||||
if (!ChannelStore.isDefault(channel)) {
|
if (!ChannelStore.isDefault(channel)) {
|
||||||
deleteChannelOption = (
|
deleteChannelOption = (
|
||||||
<li role='presentation'>
|
<li role='presentation'>
|
||||||
@@ -617,6 +617,7 @@ export default class Navbar extends React.Component {
|
|||||||
var popoverContent;
|
var popoverContent;
|
||||||
var isAdmin = false;
|
var isAdmin = false;
|
||||||
var isSystemAdmin = false;
|
var isSystemAdmin = false;
|
||||||
|
var isChannelAdmin = false;
|
||||||
var isDirect = false;
|
var isDirect = false;
|
||||||
|
|
||||||
var editChannelHeaderModal = null;
|
var editChannelHeaderModal = null;
|
||||||
@@ -647,6 +648,7 @@ export default class Navbar extends React.Component {
|
|||||||
|
|
||||||
isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
|
isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser();
|
||||||
isSystemAdmin = UserStore.isSystemAdminForCurrentUser();
|
isSystemAdmin = UserStore.isSystemAdminForCurrentUser();
|
||||||
|
isChannelAdmin = ChannelStore.isChannelAdminForCurrentChannel();
|
||||||
|
|
||||||
if (channel.type === 'O') {
|
if (channel.type === 'O') {
|
||||||
channelTitle = channel.display_name;
|
channelTitle = channel.display_name;
|
||||||
@@ -753,7 +755,7 @@ export default class Navbar extends React.Component {
|
|||||||
</button>
|
</button>
|
||||||
);
|
);
|
||||||
|
|
||||||
var channelMenuDropdown = this.createDropdown(channel, channelTitle, isAdmin, isSystemAdmin, isDirect, popoverContent);
|
var channelMenuDropdown = this.createDropdown(channel, channelTitle, isAdmin, isSystemAdmin, isChannelAdmin, isDirect, popoverContent);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -322,6 +322,7 @@
|
|||||||
"admin.general.policy.permissionsDeletePostAll": "Message authors can delete their own messages, and Administrators can delete any message",
|
"admin.general.policy.permissionsDeletePostAll": "Message authors can delete their own messages, and Administrators can delete any message",
|
||||||
"admin.general.policy.permissionsDeletePostSystemAdmin": "System Admins",
|
"admin.general.policy.permissionsDeletePostSystemAdmin": "System Admins",
|
||||||
"admin.general.policy.permissionsSystemAdmin": "System Admins",
|
"admin.general.policy.permissionsSystemAdmin": "System Admins",
|
||||||
|
"admin.general.policy.permissionsChannelAdmin": "Channel, Team and System Admins",
|
||||||
"admin.general.policy.restrictPostDeleteDescription": "Set policy on who has permission to delete messages.",
|
"admin.general.policy.restrictPostDeleteDescription": "Set policy on who has permission to delete messages.",
|
||||||
"admin.general.policy.restrictPostDeleteTitle": "Allow which users to delete messages:",
|
"admin.general.policy.restrictPostDeleteTitle": "Allow which users to delete messages:",
|
||||||
"admin.general.policy.restrictPrivateChannelCreationDescription": "Set policy on who can create private groups.",
|
"admin.general.policy.restrictPrivateChannelCreationDescription": "Set policy on who can create private groups.",
|
||||||
|
|||||||
@@ -377,7 +377,17 @@ class ChannelStoreClass extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isChannelAdminForCurrentChannel() {
|
isChannelAdminForCurrentChannel() {
|
||||||
return this.isChannelAdmin(UserStore.getCurrentId(), this.getCurrentId());
|
if (!Utils) {
|
||||||
|
Utils = require('utils/utils.jsx'); //eslint-disable-line global-require
|
||||||
|
}
|
||||||
|
|
||||||
|
const member = this.getMyMember(this.getCurrentId());
|
||||||
|
|
||||||
|
if (!member) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Utils.isChannelAdmin(member.roles);
|
||||||
}
|
}
|
||||||
|
|
||||||
isChannelAdmin(userId, channelId) {
|
isChannelAdmin(userId, channelId) {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ export function showCreateOption(channelType, isAdmin, isSystemAdmin) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function showManagementOptions(channel, isAdmin, isSystemAdmin) {
|
export function showManagementOptions(channel, isAdmin, isSystemAdmin, isChannelAdmin) {
|
||||||
if (global.window.mm_license.IsLicensed !== 'true') {
|
if (global.window.mm_license.IsLicensed !== 'true') {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -138,6 +138,9 @@ export function showManagementOptions(channel, isAdmin, isSystemAdmin) {
|
|||||||
if (global.window.mm_config.RestrictPublicChannelManagement === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
if (global.window.mm_config.RestrictPublicChannelManagement === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (global.window.mm_config.RestrictPublicChannelManagement === Constants.PERMISSIONS_CHANNEL_ADMIN && !isChannelAdmin && !isAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (channel.type === Constants.PRIVATE_CHANNEL) {
|
} else if (channel.type === Constants.PRIVATE_CHANNEL) {
|
||||||
if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
|
if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
|
||||||
return false;
|
return false;
|
||||||
@@ -145,12 +148,15 @@ export function showManagementOptions(channel, isAdmin, isSystemAdmin) {
|
|||||||
if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (global.window.mm_config.RestrictPrivateChannelManagement === Constants.PERMISSIONS_CHANNEL_ADMIN && !isChannelAdmin && !isAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function showDeleteOption(channel, isAdmin, isSystemAdmin) {
|
export function showDeleteOption(channel, isAdmin, isSystemAdmin, isChannelAdmin) {
|
||||||
if (global.window.mm_license.IsLicensed !== 'true') {
|
if (global.window.mm_license.IsLicensed !== 'true') {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -162,6 +168,9 @@ export function showDeleteOption(channel, isAdmin, isSystemAdmin) {
|
|||||||
if (global.window.mm_config.RestrictPublicChannelDeletion === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
if (global.window.mm_config.RestrictPublicChannelDeletion === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (global.window.mm_config.RestrictPublicChannelDeletion === Constants.PERMISSIONS_CHANNEL_ADMIN && !isChannelAdmin && !isAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} else if (channel.type === Constants.PRIVATE_CHANNEL) {
|
} else if (channel.type === Constants.PRIVATE_CHANNEL) {
|
||||||
if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
|
if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) {
|
||||||
return false;
|
return false;
|
||||||
@@ -169,6 +178,9 @@ export function showDeleteOption(channel, isAdmin, isSystemAdmin) {
|
|||||||
if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (global.window.mm_config.RestrictPrivateChannelDeletion === Constants.PERMISSIONS_CHANNEL_ADMIN && !isChannelAdmin && !isAdmin) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -877,6 +877,7 @@ export const Constants = {
|
|||||||
LICENSE_EXPIRY_NOTIFICATION: 1000 * 60 * 60 * 24 * 15, // 15 days
|
LICENSE_EXPIRY_NOTIFICATION: 1000 * 60 * 60 * 24 * 15, // 15 days
|
||||||
LICENSE_GRACE_PERIOD: 1000 * 60 * 60 * 24 * 15, // 15 days
|
LICENSE_GRACE_PERIOD: 1000 * 60 * 60 * 24 * 15, // 15 days
|
||||||
PERMISSIONS_ALL: 'all',
|
PERMISSIONS_ALL: 'all',
|
||||||
|
PERMISSIONS_CHANNEL_ADMIN: 'channel_admin',
|
||||||
PERMISSIONS_TEAM_ADMIN: 'team_admin',
|
PERMISSIONS_TEAM_ADMIN: 'team_admin',
|
||||||
PERMISSIONS_SYSTEM_ADMIN: 'system_admin',
|
PERMISSIONS_SYSTEM_ADMIN: 'system_admin',
|
||||||
PERMISSIONS_DELETE_POST_ALL: 'all',
|
PERMISSIONS_DELETE_POST_ALL: 'all',
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user