fix permissions for process callers api

This commit is contained in:
burnettk 2023-04-27 07:20:52 -04:00
parent 451bc4bbc9
commit c7b69e0fd9
No known key found for this signature in database
9 changed files with 24 additions and 22 deletions

View File

@ -519,16 +519,16 @@ paths:
schema: schema:
type: string type: string
/processes/{bpmn_process_identifier}/callers: /processes/callers:
parameters: parameters:
- name: bpmn_process_identifier - name: bpmn_process_identifier
in: path in: query
required: true required: true
description: the modified process model id description: the bpmn process identifier/id (not the name with spaces and not the process model identifier)
schema: schema:
type: string type: string
get: get:
operationId: spiffworkflow_backend.routes.process_api_blueprint.process_caller_lists operationId: spiffworkflow_backend.routes.process_api_blueprint.process_caller_list
summary: summary:
Return a list of information about all processes that call the provided process id Return a list of information about all processes that call the provided process id
tags: tags:

View File

@ -18,13 +18,13 @@ def setup_database_uri(app: Flask) -> None:
if app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_URI") is None: if app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_URI") is None:
database_name = f"spiffworkflow_backend_{app.config['ENV_IDENTIFIER']}" database_name = f"spiffworkflow_backend_{app.config['ENV_IDENTIFIER']}"
if app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_TYPE") == "sqlite": if app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_TYPE") == "sqlite":
app.config[ app.config["SQLALCHEMY_DATABASE_URI"] = (
"SQLALCHEMY_DATABASE_URI" f"sqlite:///{app.instance_path}/db_{app.config['ENV_IDENTIFIER']}.sqlite3"
] = f"sqlite:///{app.instance_path}/db_{app.config['ENV_IDENTIFIER']}.sqlite3" )
elif app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_TYPE") == "postgres": elif app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_TYPE") == "postgres":
app.config[ app.config["SQLALCHEMY_DATABASE_URI"] = (
"SQLALCHEMY_DATABASE_URI" f"postgresql://spiffworkflow_backend:spiffworkflow_backend@localhost:5432/{database_name}"
] = f"postgresql://spiffworkflow_backend:spiffworkflow_backend@localhost:5432/{database_name}" )
else: else:
# use pswd to trick flake8 with hardcoded passwords # use pswd to trick flake8 with hardcoded passwords
db_pswd = app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD") db_pswd = app.config.get("SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD")

View File

@ -127,9 +127,9 @@ class ProcessInstanceModel(SpiffworkflowBaseDBModel):
def serialized_with_metadata(self) -> dict[str, Any]: def serialized_with_metadata(self) -> dict[str, Any]:
process_instance_attributes = self.serialized process_instance_attributes = self.serialized
process_instance_attributes["process_metadata"] = self.process_metadata process_instance_attributes["process_metadata"] = self.process_metadata
process_instance_attributes[ process_instance_attributes["process_model_with_diagram_identifier"] = (
"process_model_with_diagram_identifier" self.process_model_with_diagram_identifier
] = self.process_model_with_diagram_identifier )
return process_instance_attributes return process_instance_attributes
@property @property

View File

@ -78,7 +78,7 @@ def process_list() -> Any:
return SpecReferenceSchema(many=True).dump(references) return SpecReferenceSchema(many=True).dump(references)
def process_caller_lists(bpmn_process_identifier: str) -> Any: def process_caller_list(bpmn_process_identifier: str) -> Any:
callers = ProcessCallerService.callers(bpmn_process_identifier) callers = ProcessCallerService.callers(bpmn_process_identifier)
references = ( references = (
SpecReferenceCache.query.filter_by(type="process").filter(SpecReferenceCache.identifier.in_(callers)).all() SpecReferenceCache.query.filter_by(type="process").filter(SpecReferenceCache.identifier.in_(callers)).all()

View File

@ -572,6 +572,7 @@ class AuthorizationService:
permissions_to_assign: list[PermissionToAssign] = [] permissions_to_assign: list[PermissionToAssign] = []
permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/process-instances/for-me")) permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/process-instances/for-me"))
permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/processes")) permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/processes"))
permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/processes/callers"))
permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/service-tasks")) permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/service-tasks"))
permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/user-groups/for-current-user")) permissions_to_assign.append(PermissionToAssign(permission="read", target_uri="/user-groups/for-current-user"))
permissions_to_assign.append(PermissionToAssign(permission="create", target_uri="/users/exists/by-username")) permissions_to_assign.append(PermissionToAssign(permission="create", target_uri="/users/exists/by-username"))

View File

@ -423,9 +423,9 @@ class ProcessInstanceProcessor:
tld.process_instance_id = process_instance_model.id tld.process_instance_id = process_instance_model.id
# we want this to be the fully qualified path to the process model including all group subcomponents # we want this to be the fully qualified path to the process model including all group subcomponents
current_app.config[ current_app.config["THREAD_LOCAL_DATA"].process_model_identifier = (
"THREAD_LOCAL_DATA" f"{process_instance_model.process_model_identifier}"
].process_model_identifier = f"{process_instance_model.process_model_identifier}" )
self.process_instance_model = process_instance_model self.process_instance_model = process_instance_model
self.process_model_service = ProcessModelService() self.process_model_service = ProcessModelService()
@ -585,9 +585,9 @@ class ProcessInstanceProcessor:
bpmn_subprocess_definition.bpmn_identifier bpmn_subprocess_definition.bpmn_identifier
] = bpmn_process_definition_dict ] = bpmn_process_definition_dict
spiff_bpmn_process_dict["subprocess_specs"][bpmn_subprocess_definition.bpmn_identifier]["task_specs"] = {} spiff_bpmn_process_dict["subprocess_specs"][bpmn_subprocess_definition.bpmn_identifier]["task_specs"] = {}
bpmn_subprocess_definition_bpmn_identifiers[ bpmn_subprocess_definition_bpmn_identifiers[bpmn_subprocess_definition.id] = (
bpmn_subprocess_definition.id bpmn_subprocess_definition.bpmn_identifier
] = bpmn_subprocess_definition.bpmn_identifier )
task_definitions = TaskDefinitionModel.query.filter( task_definitions = TaskDefinitionModel.query.filter(
TaskDefinitionModel.bpmn_process_definition_id.in_( # type: ignore TaskDefinitionModel.bpmn_process_definition_id.in_( # type: ignore

View File

@ -591,7 +591,7 @@ class TestProcessApi(BaseTest):
# get the results # get the results
response = client.get( response = client.get(
"/v1.0/processes/Level2/callers", "/v1.0/processes/callers?bpmn_process_identifier=Level2",
headers=self.logged_in_headers(with_super_admin_user), headers=self.logged_in_headers(with_super_admin_user),
) )
assert response.json is not None assert response.json is not None

View File

@ -296,6 +296,7 @@ class TestAuthorizationService(BaseTest):
("/process-instances/reports/*", "read"), ("/process-instances/reports/*", "read"),
("/process-instances/reports/*", "update"), ("/process-instances/reports/*", "update"),
("/processes", "read"), ("/processes", "read"),
("/processes/callers", "read"),
("/service-tasks", "read"), ("/service-tasks", "read"),
("/tasks/*", "create"), ("/tasks/*", "create"),
("/tasks/*", "delete"), ("/tasks/*", "delete"),

View File

@ -168,7 +168,7 @@ export default function ProcessModelEditDiagram() {
useEffect(() => { useEffect(() => {
if (processModel !== null) { if (processModel !== null) {
HttpService.makeCallToBackend({ HttpService.makeCallToBackend({
path: `/processes/${processModel.primary_process_id}/callers`, path: `/processes/callers?bpmn_process_identifier=${processModel.primary_process_id}`,
successCallback: setCallers, successCallback: setCallers,
}); });
} }