Complement Guest role restrictions for Enterprise (#17393)
Co-authored-by: Diego Sampaio <chinello@gmail.com>pull/17482/head
parent
9de05043b7
commit
c871ebe304
@ -1,10 +0,0 @@ |
||||
import { Meteor } from 'meteor/meteor'; |
||||
|
||||
export const AuthorizationUtils = class { |
||||
static isRoleReadOnly(roleId: string): boolean { |
||||
if (!roleId) { |
||||
throw new Meteor.Error('invalid-param'); |
||||
} |
||||
return false; |
||||
} |
||||
}; |
||||
@ -0,0 +1,56 @@ |
||||
import { Meteor } from 'meteor/meteor'; |
||||
|
||||
const restrictedRolePermissions = new Map(); |
||||
|
||||
export const AuthorizationUtils = class { |
||||
static addRolePermissionWhiteList(roleId: string, list: [string]): void { |
||||
if (!roleId) { |
||||
throw new Meteor.Error('invalid-param'); |
||||
} |
||||
|
||||
if (!list) { |
||||
throw new Meteor.Error('invalid-param'); |
||||
} |
||||
|
||||
if (!restrictedRolePermissions.has(roleId)) { |
||||
restrictedRolePermissions.set(roleId, new Set()); |
||||
} |
||||
|
||||
const rules = restrictedRolePermissions.get(roleId); |
||||
|
||||
for (const permissionId of list) { |
||||
rules.add(permissionId); |
||||
} |
||||
} |
||||
|
||||
static isPermissionRestrictedForRole(permissionId: string, roleId: string): boolean { |
||||
if (!roleId || !permissionId) { |
||||
throw new Meteor.Error('invalid-param'); |
||||
} |
||||
|
||||
if (!restrictedRolePermissions.has(roleId)) { |
||||
return false; |
||||
} |
||||
|
||||
const rules = restrictedRolePermissions.get(roleId); |
||||
if (!rules || !rules.size) { |
||||
return false; |
||||
} |
||||
|
||||
return !rules.has(permissionId); |
||||
} |
||||
|
||||
static isPermissionRestrictedForRoleList(permissionId: string, roleList: [string]): boolean { |
||||
if (!roleList || !permissionId) { |
||||
throw new Meteor.Error('invalid-param'); |
||||
} |
||||
|
||||
for (const roleId of roleList) { |
||||
if (this.isPermissionRestrictedForRole(permissionId, roleId)) { |
||||
return true; |
||||
} |
||||
} |
||||
|
||||
return false; |
||||
} |
||||
}; |
||||
@ -1,10 +0,0 @@ |
||||
import { Meteor } from 'meteor/meteor'; |
||||
|
||||
export const AuthorizationUtils = class { |
||||
static isRoleReadOnly(roleId: string): boolean { |
||||
if (!roleId) { |
||||
throw new Meteor.Error('invalid-param'); |
||||
} |
||||
return false; |
||||
} |
||||
}; |
||||
@ -1,12 +0,0 @@ |
||||
import { AuthorizationUtils } from '../../../../app/authorization/client/lib/AuthorizationUtils'; |
||||
import { isEnterprise } from '../../license/client'; |
||||
|
||||
const { isRoleReadOnly: oldIsRoleReadOnly } = AuthorizationUtils; |
||||
|
||||
AuthorizationUtils.isRoleReadOnly = function(roleId: string): boolean { |
||||
if (isEnterprise() && roleId === 'guest') { |
||||
return true; |
||||
} |
||||
|
||||
return oldIsRoleReadOnly(roleId); |
||||
}; |
||||
@ -1 +1,15 @@ |
||||
import './AuthorizationUtils'; |
||||
import { Meteor } from 'meteor/meteor'; |
||||
|
||||
import { addRoleRestrictions } from '../lib/addRoleRestrictions'; |
||||
|
||||
Meteor.startup(() => { |
||||
Meteor.call('license:isEnterprise', (err, result) => { |
||||
if (err) { |
||||
throw err; |
||||
} |
||||
|
||||
if (result) { |
||||
addRoleRestrictions(); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
@ -0,0 +1,6 @@ |
||||
import { AuthorizationUtils } from '../../../../app/authorization/lib/AuthorizationUtils'; |
||||
import { guestPermissions } from './guestPermissions'; |
||||
|
||||
export const addRoleRestrictions = function() { |
||||
AuthorizationUtils.addRolePermissionWhiteList('guest', guestPermissions); |
||||
}; |
||||
@ -0,0 +1,6 @@ |
||||
export const guestPermissions = [ |
||||
'view-d-room', |
||||
'view-joined-room', |
||||
'view-p-room', |
||||
'start-discussion', |
||||
]; |
||||
@ -1,12 +0,0 @@ |
||||
import { AuthorizationUtils } from '../../../../app/authorization/server/lib/AuthorizationUtils'; |
||||
import { isEnterprise } from '../../license/server'; |
||||
|
||||
const { isRoleReadOnly: oldIsRoleReadOnly } = AuthorizationUtils; |
||||
|
||||
AuthorizationUtils.isRoleReadOnly = function(roleId: string): boolean { |
||||
if (isEnterprise() && roleId === 'guest') { |
||||
return true; |
||||
} |
||||
|
||||
return oldIsRoleReadOnly(roleId); |
||||
}; |
||||
@ -1 +1 @@ |
||||
import './AuthorizationUtils'; |
||||
import '../lib/addRoleRestrictions'; |
||||
|
||||
@ -0,0 +1,6 @@ |
||||
import { Permissions } from '../../../../app/models/server'; |
||||
import { guestPermissions } from '../lib/guestPermissions'; |
||||
|
||||
export const resetEnterprisePermissions = function() { |
||||
Permissions.update({ _id: { $nin: guestPermissions } }, { $pull: { roles: 'guest' } }, { multi: true }); |
||||
}; |
||||
Loading…
Reference in new issue