Marker contract every partner-scoping attribute implements so the applier can route them generically through their named resolver.
Sugar attributes (e.g. #[ScopedToActor], #[ScopedToOrgActors],
future #[ScopedToHierarchy]) are thin declarative classes — they
carry the keying column for the source query and name the resolver
class that computes the partner-id set. The applier reads them via
this interface only, never by concrete attribute type, which is what
keeps the family open-ended: a new bridge ships as one resolver
class plus one sugar attribute class — no applier rewrite, no
entity-set rewrite.
Implementing classes are also expected to carry #[\Attribute(\Attribute::TARGET_CLASS)]
so PHP's attribute reflection picks them up off ScopedAbstractEntitySet
subclasses. The interface itself does not (and cannot) enforce that —
it's a convention this contract relies on.
See https://laravelui5.com/sdk/security/scoped-entity-sets for the design rationale and
LaravelUi5\Sdk\Partners\Contracts\ScopeResolverInterface for the
resolver side of the contract.
| Methods | ||
|---|---|---|
public
|
resolverClass(): class-string<ScopeResolverInterface>
|
# |
public
|
keyColumn(): string
|
# |