upd defult editing field sequences generation when ownership fields defined
This commit is contained in:
@@ -222,3 +222,40 @@ def get_field_descriptor(
|
||||
if entity_descriptor:
|
||||
return entity_descriptor.fields_descriptors.get(callback_data.field_name)
|
||||
return None
|
||||
|
||||
|
||||
def build_field_sequence(
|
||||
entity_descriptor: EntityDescriptor, user: "UserBase", callback_data: ContextData
|
||||
):
|
||||
field_sequence = list[str]()
|
||||
# exclude ownership fields from edit if user has no CREATE_ALL/UPDATE_ALL permission
|
||||
user_permissions = get_user_permissions(user, entity_descriptor)
|
||||
for fd in entity_descriptor.fields_descriptors.values():
|
||||
if not (
|
||||
fd.is_optional
|
||||
or fd.field_name == "id"
|
||||
or fd.field_name[:-3] == "_id"
|
||||
or fd.default is not None
|
||||
):
|
||||
skip = False
|
||||
for own_field in entity_descriptor.ownership_fields.items():
|
||||
if (
|
||||
own_field[1].rstrip("_id") == fd.field_name.rstrip("_id")
|
||||
and own_field[0] in user.roles
|
||||
and (
|
||||
(
|
||||
EntityPermission.CREATE_ALL not in user_permissions
|
||||
and callback_data.context == CommandContext.ENTITY_CREATE
|
||||
)
|
||||
or (
|
||||
EntityPermission.UPDATE_ALL not in user_permissions
|
||||
and callback_data.context == CommandContext.ENTITY_EDIT
|
||||
)
|
||||
)
|
||||
):
|
||||
skip = True
|
||||
break
|
||||
if not skip:
|
||||
field_sequence.append(fd.field_name)
|
||||
|
||||
return field_sequence
|
||||
|
||||
Reference in New Issue
Block a user