mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-31 13:47:02 +02:00
fix: add permissions to editor
This commit is contained in:
parent
5ca23b80e7
commit
19f78314d1
@ -0,0 +1,27 @@
|
|||||||
|
exports.up = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
INSERT INTO role_permission (role_id, permission_id, environment)
|
||||||
|
SELECT
|
||||||
|
(SELECT id as role_id from roles WHERE name = 'Editor' LIMIT 1),
|
||||||
|
p.id as permission_id,
|
||||||
|
e.name as environment
|
||||||
|
FROM permissions p
|
||||||
|
CROSS JOIN environments e
|
||||||
|
WHERE p.permission IN
|
||||||
|
('CREATE_FEATURE_STRATEGY',
|
||||||
|
'UPDATE_FEATURE_STRATEGY',
|
||||||
|
'DELETE_FEATURE_STRATEGY',
|
||||||
|
'UPDATE_FEATURE_ENVIRONMENT');
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.down = function (db, cb) {
|
||||||
|
db.runSql(
|
||||||
|
`
|
||||||
|
`,
|
||||||
|
cb,
|
||||||
|
);
|
||||||
|
};
|
@ -114,30 +114,264 @@ test('should not have admin permission', async () => {
|
|||||||
expect(await accessService.hasPermission(user, ADMIN)).toBe(false);
|
expect(await accessService.hasPermission(user, ADMIN)).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('should have project admin to default project', async () => {
|
test('should have project admin to default project as editor', async () => {
|
||||||
|
const projectName = 'default';
|
||||||
|
const defaultEnv = 'default';
|
||||||
|
const developmentEnv = 'development';
|
||||||
|
const productionEnv = 'production';
|
||||||
const {
|
const {
|
||||||
DELETE_PROJECT,
|
DELETE_PROJECT,
|
||||||
UPDATE_PROJECT,
|
UPDATE_PROJECT,
|
||||||
CREATE_FEATURE,
|
CREATE_FEATURE,
|
||||||
UPDATE_FEATURE,
|
UPDATE_FEATURE,
|
||||||
DELETE_FEATURE,
|
DELETE_FEATURE,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
} = permissions;
|
} = permissions;
|
||||||
const user = editorUser;
|
const user = editorUser;
|
||||||
expect(
|
expect(
|
||||||
await accessService.hasPermission(user, DELETE_PROJECT, 'default'),
|
await accessService.hasPermission(user, DELETE_PROJECT, projectName),
|
||||||
).toBe(true);
|
).toBe(true);
|
||||||
expect(
|
expect(
|
||||||
await accessService.hasPermission(user, UPDATE_PROJECT, 'default'),
|
await accessService.hasPermission(user, UPDATE_PROJECT, projectName),
|
||||||
).toBe(true);
|
).toBe(true);
|
||||||
expect(
|
expect(
|
||||||
await accessService.hasPermission(user, CREATE_FEATURE, 'default'),
|
await accessService.hasPermission(user, CREATE_FEATURE, projectName),
|
||||||
).toBe(true);
|
).toBe(true);
|
||||||
expect(
|
expect(
|
||||||
await accessService.hasPermission(user, UPDATE_FEATURE, 'default'),
|
await accessService.hasPermission(user, UPDATE_FEATURE, projectName),
|
||||||
).toBe(true);
|
).toBe(true);
|
||||||
expect(
|
expect(
|
||||||
await accessService.hasPermission(user, DELETE_FEATURE, 'default'),
|
await accessService.hasPermission(user, DELETE_FEATURE, projectName),
|
||||||
).toBe(true);
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Editor should not have project admin to other projects', async () => {
|
||||||
|
const projectName = 'unusedprojectname';
|
||||||
|
const defaultEnv = 'default';
|
||||||
|
const developmentEnv = 'development';
|
||||||
|
const productionEnv = 'production';
|
||||||
|
const {
|
||||||
|
DELETE_PROJECT,
|
||||||
|
UPDATE_PROJECT,
|
||||||
|
CREATE_FEATURE,
|
||||||
|
UPDATE_FEATURE,
|
||||||
|
DELETE_FEATURE,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
} = permissions;
|
||||||
|
const user = editorUser;
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(user, DELETE_PROJECT, projectName),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(user, UPDATE_PROJECT, projectName),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(user, CREATE_FEATURE, projectName),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(user, UPDATE_FEATURE, projectName),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(user, DELETE_FEATURE, projectName),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
projectName,
|
||||||
|
defaultEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
projectName,
|
||||||
|
developmentEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
CREATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
DELETE_FEATURE_STRATEGY,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
|
expect(
|
||||||
|
await accessService.hasPermission(
|
||||||
|
user,
|
||||||
|
UPDATE_FEATURE_ENVIRONMENT,
|
||||||
|
projectName,
|
||||||
|
productionEnv,
|
||||||
|
),
|
||||||
|
).toBe(false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('cannot add CREATE_FEATURE without defining project', async () => {
|
test('cannot add CREATE_FEATURE without defining project', async () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user