Some years ago you could have tackled this challenge by either writing all of the authZ logic yourself or by utilizing the tools that did a combination of authentication and authorization.
Today, however, there are more than a couple of solutions that tackle the authZ realm. In terms of scalability and ease of use (among some other things) I strongly recommend checking out the cerbos.dev.
It's an open source tool that does pretty much what you're looking for - authZ at scale, and enables you to make policies such as the one you described (and much more complex ones too).
Depending on your stack, the installation details might slightly differ, so I strongly recommend checking the quickstart manual.
But as per the policy you're trying to define, what you'll end up needing is something like this:
---
apiVersion: api.cerbos.dev/v1
resourcePolicy:
version: "default"
resource: organization
rules:
- actions: ["edit"]
effect: EFFECT_ALLOW
roles:
- user
condition:
match:
expr: request.resource.attr.owner == request.principal.id
The above represents an example of a yaml file that defines a Cerbos resource policy (resource in your case is an organization for which you want to create a policy rule).
And all your codebase would have to do is trigger an API call (via a proper SDK or directly) of a CheckResources endpoint, documented here - for which all you MUST provide are 3 things: a resource (the organization in question), an action (edit in your question example), and a principal object (the user which is trying to edit the org).
P.S. It all lives on your end (self hosted solution), so no need to worry about your users' data going to someone else’s servers or security challenges like such.