feat: add strict field protection for Models#10302
Open
memleakd wants to merge 2 commits into
Open
Conversation
Add an opt-in Model setting that throws when write data contains fields that would otherwise be discarded by allowed field protection. - Add $strictFieldProtection and strictFieldProtection() - Throw DataException for disallowed write fields in strict mode - Preserve existing primary key and updateBatch index behavior - Cover insert, save, update, batch, validation order, and protect(false) - Document the new option and update the model generator template Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.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.
Description
This PR proposes adding an opt-in strict field protection mode for Models.
By default, Models keep the existing behavior: fields not listed in
$allowedFieldsare silently discarded before the write reaches the database. With strict field protection enabled, those discarded fields throw aDataExceptioninstead:This is useful for catching typos, stale form fields, and unexpected write payloads while keeping the existing mass-assignment protection model intact. It does not replace validation and does not inspect the database schema; it only makes the existing
$allowedFieldsdiscard step explicit when requested.The implementation keeps the current behavior for operation fields that are needed to locate records, such as the primary key during
update()and the index field duringupdateBatch().Changes
$strictFieldProtectionandstrictFieldProtection()to Models.DataExceptionwhen strict mode detects fields that would otherwise be discarded.protect(false), non-auto-increment primary keys, andupdateBatch()indexes.Checklist: