This commit is contained in:
@@ -22,6 +22,15 @@ team membership can be removed independently. Configure `OwnerRole` when
|
||||
constructing the service before exposing membership-removal operations. The
|
||||
SQLite adapter then refuses to suspend or remove the final active direct owner.
|
||||
|
||||
Fresh-authentication administration pages should use
|
||||
`ChangeMembershipStatus` and `RemoveMembershipIfCurrent`, passing the exact
|
||||
displayed state as `ExpectedStatus`. The SQLite adapter acquires its write lock
|
||||
before checking that state, verifies the actor is still an active member of an
|
||||
active organization, and commits the lifecycle effects and audit together.
|
||||
Suspension removes team memberships; reactivation does not infer or restore
|
||||
them. Removal also revokes current direct bindings. A repository without the
|
||||
optimistic extension fails closed instead of falling back to a stale mutation.
|
||||
|
||||
For a reviewed access-administration page, use `organizations.Members` to list
|
||||
bounded active and suspended memberships, and
|
||||
`access.OrganizationUserBindings` to list only current direct,
|
||||
|
||||
Reference in New Issue
Block a user