Repository navigation
Ontwerp opleveren voor issue #123 (buildora): een record-level authorization hook toevoegen aan BuildoraResource zodat IDOR (elke user met resource-permission kan elk record zien) wordt voorkomen. - #191
Merged
zyra-ginkelsoft[bot] merged 1 commit intoSep 3, 2026
Merged
zyra-ginkelsoft[bot] merged 1 commit into
zyra-ginkelsoft[bot] merged 1 commit into
Conversation
Ontwerpt scopeQuery() (query-scoping, dekt list/detail/export/edit/update/ destroy via nieuwe newScopedQuery()) en policy() (Gate::authorize() in BuildoraController voor show/edit/update/destroy) als twee onafhankelijke, backwards-compatible hooks op BuildoraResource. Vastgelegd als reactie op issue #123 in .zyra/issue-123-comment.md, inclusief testscenario en CLAUDE.md-documentatievoorbeeld. Geen productiecode gewijzigd (ontwerptaak). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Goed, proef.sh bestaat al en past correct bij dit package (geen host-app, Testbench-gebaseerd). Ik test of het nog werkt.Zoals proef.sh al zelf afvangt — normale install faalt op ext-gd, met fallback. Dat is verwacht gedrag; laat proef.sh dat zelf oplossen.Composer install lukt met de fallback. Nu de rest van proef.sh: sqlite db + migraties.proef.sh werkt nog steeds prima. Nu server kort testen op een poort en daarna stoppen.proef.sh functioneert. Nu de bestaande unittests draaien om baseline te checken, en verder de relevante bestanden verkennen (Datatable/QueryFactory verwezen in taak zit blijkbaar in src/Resources, niet src/Datatable — laat me checken of er ook een src/Support/BuildoraResource.php of src/Datatable/QueryFactory.php bestaat zoals de taak zegt).Nu schrijf ik het ontwerpdocument als reactie op issue #123, volgens het bestaande patroon in
.zyra/.Nu proef.sh nog even end-to-end bevestigen (was al gedaan), en dan committen..zyra/proef.shbestond al en werkte, dus geen wijziging nodig daar — alleen het nieuwe ontwerpdocument toevoegen.## SamenvattingWat ik deed: onderzocht waar de IDOR daadwerkelijk zit (
BuildoraController::show()loopt viaQueryFactory, maaredit()/update()/destroy()bypassen die volledig met een rechtstreeksegetModelInstance()->findOrFail();DataFetcherenExportManagerlopen wél viaQueryFactory). Op basis daarvan een ontwerp gemaakt met twee onafhankelijke, backwards-compatible hooks:scopeQuery(Builder $query): Builder(default no-op) — toegepast inQueryFactory::make(), plus een nieuwenewScopedQuery()-helper opBuildoraResourcezodat ookedit()/update()/destroy()(die nu buitenQueryFactoryom gaan) mee-filteren. Ontoegankelijke records → 404.policy(): ?string(defaultnull) — nieuweauthorizeRecord()-helper inBuildoraControllerdieGate::authorize()aanroept inshow()/edit()/update()/destroy(). Ontoegankelijke records → 403.Beide zijn los of samen te gebruiken; backwards compatibility is expliciet geborgd (default no-op = huidig gedrag, letterlijk aangetoond). Testscenario (regressie + scopeQuery + policy, voor show/edit/update/destroy) en het CLAUDE.md-documentatievoorbeeld zijn uitgeschreven. Ook een bewust buiten scope gelaten kanttekening genoemd (
RelationDatatableControllerheeft hetzelfde patroon voor het parent-record, apart issue voorstellen).Er is geen productiecode aangepast — dit is een ontwerptaak. Het volledige ontwerp staat in
.zyra/issue-123-comment.md, klaar om als reactie op issue #123 geplaatst te worden (ik heb zelf geen GitHub-toegang in deze werkplaats, net als bij eerdere taken hier).Wat ik testte:
.zyra/proef.shbestond al en past bij dit package (geen host-app, Orchestra Testbench) — ik heb 'm end-to-end doorlopen:composer install(met de al aanwezigeext-gd-fallback), sqlite-db aanmaken, migraties draaien, en kort de server op een testport gestart — alles werkt ongewijzigd. Ookvendor/bin/phpunitgedraaid (36/36 groen) als baseline, zowel voor als na het toevoegen van het ontwerpdocument (dat geen code raakt).Wat nog open staat: dit is puur het ontwerp; de bouwtaak (implementatie van
scopeQuery()/newScopedQuery()/policy()inBuildoraResource.php,QueryFactory.phpenBuildoraController.php, plus de nieuwe testklasse en CLAUDE.md-update) moet nog gedaan worden door een volgende agent. Iemand met GitHub-toegang moet de tekst uit.zyra/issue-123-comment.mdnog als comment op issue #123 plaatsen.