Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Signed-off-by: soupette <cyril.lpz@gmail.com>
Signed-off-by: Garrett Fritz <garrettfritz@garretts-mbp.home>
  • Loading branch information
soupette authored and Garrett Fritz committed Sep 7, 2020
1 parent 9319f4a commit aa4388e
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import {
LoadingIndicatorPage,
request,
useGlobalContext,
findMatchingPermissions,
useUser,
useUserPermissions,
OverlayBlocker,
Expand All @@ -20,8 +19,9 @@ import {
cleanData,
createDefaultForm,
createYupSchema,
getYupInnerErrors,
getFieldsActionMatchingPermissions,
getFilesToUpload,
getYupInnerErrors,
removePasswordFieldsFromData,
} from './utils';

Expand Down Expand Up @@ -79,15 +79,13 @@ const EditViewDataManagerProvider = ({
isLoading: isLoadingForPermissions,
allowedActions: { canCreate, canRead, canUpdate },
} = useUserPermissions(permissionsToApply);
const createActionAllowedFields = useMemo(() => {
const matchingPermissions = findMatchingPermissions(userPermissions, [
{
action: 'plugins::content-manager.explorer.create',
subject: slug,
},
]);

return get(matchingPermissions, ['0', 'fields'], []);
const {
createActionAllowedFields,
readActionAllowedFields,
updateActionAllowedFields,
} = useMemo(() => {
return getFieldsActionMatchingPermissions(userPermissions, slug);
}, [userPermissions, slug]);

const shouldRedirectToHomepageWhenCreatingEntry = useMemo(() => {
Expand Down Expand Up @@ -122,28 +120,6 @@ const EditViewDataManagerProvider = ({
return false;
}, [isLoadingForPermissions, isLoading, isCreatingEntry, canRead, canUpdate]);

const readActionAllowedFields = useMemo(() => {
const matchingPermissions = findMatchingPermissions(userPermissions, [
{
action: 'plugins::content-manager.explorer.read',
subject: slug,
},
]);

return get(matchingPermissions, ['0', 'fields'], []);
}, [slug, userPermissions]);

const updateActionAllowedFields = useMemo(() => {
const matchingPermissions = findMatchingPermissions(userPermissions, [
{
action: 'plugins::content-manager.explorer.update',
subject: slug,
},
]);

return get(matchingPermissions, ['0', 'fields'], []);
}, [slug, userPermissions]);

useEffect(() => {
if (!isLoading) {
checkFormErrors();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { uniq, flatMap } from 'lodash';
import { findMatchingPermissions } from 'strapi-helper-plugin';

const getFieldsActionMatchingPermissions = (userPermissions, slug) => {
const getMatchingPermissions = action => {
const matched = findMatchingPermissions(userPermissions, [
{
action: `plugins::content-manager.explorer.${action}`,
subject: slug,
},
]);

return uniq(flatMap(matched, 'fields'));
};

return {
createActionAllowedFields: getMatchingPermissions('create'),
readActionAllowedFields: getMatchingPermissions('read'),
updateActionAllowedFields: getMatchingPermissions('update'),
};
};

export default getFieldsActionMatchingPermissions;
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export { default as cleanData } from './cleanData';
export { default as createDefaultForm } from './createDefaultForm';
export { default as getFieldsActionMatchingPermissions } from './getFieldsActionMatchingPermissions';
export { default as getFilesToUpload } from './getFilesToUpload';
export { default as getYupInnerErrors } from './getYupInnerErrors';
export { default as createYupSchema } from './schema';
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import getFieldsActionMatchingPermissions from '../getFieldsActionMatchingPermissions';
import { permissions } from './testData';

describe('CONTENT MANAGER | CONTAINERS | EditViewDataManager | utils | getFieldsActionMatchingPermissions', () => {
it('should return an object with all the allowed action for the fields', () => {
const expected = {
createActionAllowedFields: [],
readActionAllowedFields: ['name', 'description', 'test'],
updateActionAllowedFields: ['name', 'description'],
};

expect(getFieldsActionMatchingPermissions(permissions, 'application::article.article')).toEqual(
expected
);
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -169,4 +169,76 @@ const testData = {
},
};

const permissions = [
{
id: 11,
action: 'plugins::content-manager.explorer.read',
subject: 'application::article.article',
fields: ['name', 'description'],
conditions: ['admin::is-creator'],
},
{
id: 12,
action: 'plugins::content-manager.explorer.update',
subject: 'application::article.article',
fields: ['name', 'description'],
conditions: ['admin::is-creator'],
},
{
id: 22,
action: 'plugins::content-manager.explorer.read',
subject: 'plugins::users-permissions.user',
fields: [
'username',
'email',
'provider',
'password',
'resetPasswordToken',
'confirmed',
'blocked',
'role',
],
conditions: [],
},
{
id: 24,
action: 'plugins::content-manager.explorer.update',
subject: 'plugins::users-permissions.user',
fields: [
'username',
'email',
'provider',
'password',
'resetPasswordToken',
'confirmed',
'blocked',
'role',
],
conditions: [],
},
{
id: 28,
action: 'plugins::upload.read',
subject: null,
fields: null,
conditions: [],
},
{
id: 39,
action: 'plugins::users-permissions.roles.update',
subject: null,
fields: null,
conditions: [],
},

{
id: 63,
action: 'plugins::content-manager.explorer.read',
subject: 'application::article.article',
fields: ['name', 'description', 'test'],
conditions: [],
},
];

export default testData;
export { permissions };

0 comments on commit aa4388e

Please sign in to comment.