[permissions] QA fixes (#13698)

In this PR

- Introduction of readableFields and updatableFields in
objectMetadataItem selector to ease filtering from a developer
experience perspective ( + to help developers think to do it). In
discussion @lucasbordeau @charlesBochet
- Remove non-updatable field from CSV import process (@etiennejouan)
- QA fix / Non-readable fields should not show on show page
- QA fix / It should not be offered to create a kanban view on a
non-readable field
- QA fix / It should not be offered to create view groups on a
non-readable field
- QA fix / Rating field should have a readonly mode

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Marie
2025-08-07 18:21:59 +02:00
committed by GitHub
parent 258f21a4be
commit ee19ee5119
120 changed files with 1211 additions and 943 deletions
@@ -0,0 +1,9 @@
import { RestrictedFieldsPermissions } from './RestrictedFieldsPermissions';
export type ObjectPermissions = {
canReadObjectRecords: boolean;
canUpdateObjectRecords: boolean;
canSoftDeleteObjectRecords: boolean;
canDestroyObjectRecords: boolean;
restrictedFields: RestrictedFieldsPermissions;
};
@@ -0,0 +1,10 @@
import { RestrictedFieldsPermissions } from './RestrictedFieldsPermissions';
// TODO: DEPRECATE THIS
export type ObjectPermissionsDeprecated = {
canRead: boolean;
canUpdate: boolean;
canSoftDelete: boolean;
canDestroy: boolean;
restrictedFields: RestrictedFieldsPermissions;
};
@@ -1,14 +0,0 @@
type ObjectMetadataId = string;
export type ObjectRecordsPermissions = Record<
ObjectMetadataId,
{
canRead: boolean;
canUpdate: boolean;
canSoftDelete: boolean;
canDestroy: boolean;
restrictedFields: Record<
string,
{ canRead?: boolean | null; canUpdate?: boolean | null }
>;
}
>;
@@ -1,7 +0,0 @@
import { ObjectRecordsPermissions } from './ObjectRecordsPermissions';
type RoleId = string;
export type ObjectRecordsPermissionsByRoleId = Record<
RoleId,
ObjectRecordsPermissions
>;
@@ -0,0 +1,5 @@
import { ObjectPermissions } from './ObjectPermissions';
type ObjectMetadataId = string;
export type ObjectsPermissions = Record<ObjectMetadataId, ObjectPermissions>;
@@ -0,0 +1,5 @@
import { ObjectsPermissions } from './ObjectsPermissions';
type RoleId = string;
export type ObjectsPermissionsByRoleId = Record<RoleId, ObjectsPermissions>;
@@ -0,0 +1,9 @@
import { ObjectsPermissionsDeprecated } from './ObjectsPermissionsDeprecated';
type RoleId = string;
// TODO: DEPRECATE THIS
export type ObjectsPermissionsByRoleIdDeprecated = Record<
RoleId,
ObjectsPermissionsDeprecated
>;
@@ -0,0 +1,9 @@
import { ObjectPermissionsDeprecated } from './ObjectPermissionsDeprecated';
type ObjectMetadataId = string;
// TODO: DEPRECATE THIS
export type ObjectsPermissionsDeprecated = Record<
ObjectMetadataId,
ObjectPermissionsDeprecated
>;
@@ -1,4 +1,4 @@
export type RestrictedField = {
export type RestrictedFieldPermissions = {
canRead?: boolean | null;
canUpdate?: boolean | null;
};
@@ -1,3 +0,0 @@
import { RestrictedField } from './RestrictedField';
export type RestrictedFields = Record<string, RestrictedField>;
@@ -0,0 +1,6 @@
import { RestrictedFieldPermissions } from './RestrictedFieldPermissions';
export type RestrictedFieldsPermissions = Record<
string,
RestrictedFieldPermissions
>;
+8 -4
View File
@@ -17,11 +17,15 @@ export type { FromTo } from './FromToType';
export type { IsExactly } from './IsExactly';
export type { NonNullableRequired } from './NonNullableRequired';
export type { NullablePartial } from './NullablePartial';
export type { ObjectRecordsPermissions } from './ObjectRecordsPermissions';
export type { ObjectRecordsPermissionsByRoleId } from './ObjectRecordsPermissionsByRoleId';
export type { ObjectPermissions } from './ObjectPermissions';
export type { ObjectPermissionsDeprecated } from './ObjectPermissionsDeprecated';
export type { ObjectsPermissions } from './ObjectsPermissions';
export type { ObjectsPermissionsByRoleId } from './ObjectsPermissionsByRoleId';
export type { ObjectsPermissionsByRoleIdDeprecated } from './ObjectsPermissionsByRoleIdDeprecated';
export type { ObjectsPermissionsDeprecated } from './ObjectsPermissionsDeprecated';
export type { RelationAndMorphRelationFieldMetadataType } from './RelationAndMorphRelationFieldMetadataType';
export type { RestrictedField } from './RestrictedField';
export type { RestrictedFields } from './RestrictedFields';
export type { RestrictedFieldPermissions } from './RestrictedFieldPermissions';
export type { RestrictedFieldsPermissions } from './RestrictedFieldsPermissions';
export type { StepFilterGroup, StepFilter } from './StepFilters';
export { StepLogicalOperator } from './StepFilters';
export { TwoFactorAuthenticationStrategy } from './TwoFactorAuthenticationStrategy';