Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add encrypted casts support + allow using the trait on multiple models #14

Merged
merged 40 commits into from
Nov 8, 2023

Conversation

lukinovec
Copy link
Contributor

@lukinovec lukinovec commented Aug 8, 2023

Encrypted casts

This PR adds support for encrypted casts. Laravel's default encrypted casts ('encrypted', 'encrypted:array', 'encrypted:collection', 'encrypted:json', 'encrypted:object') work out of the box, but the custom casts have to be specified in VirtualColumn::$customEncryptedCastables.

The problem with encrypted casts is that VirtualColumn uses $model->setAttribute(), and when using the encrypted casts, the password gets encrypted multiple times in the end. To deal with that, we check if the value is encrypted. If it is, use $model->attributes[$key] = $value instead of $model->setAttribute($key, $value) to bypass the encryption.

Shared state issues

When multiple models extended a base class that used VirtualColumn, there were issues with the shared state. Booting the trait would add event listeners specific to the model the trait's used on to the static $afterListeners property. The problem is that this was happening with each used model, and in the end, the models initialized after the first one wouldn't handle the events properly. For example, creating an instance of model Bar after creating Foo would result in Bar getting encoded using the same custom columns as Foo because Foo got initialized first.

In this PR, most of the static things in the VirtualColumn trait got changed to non-static, so that the state isn't shared across models.

src/VirtualColumn.php Outdated Show resolved Hide resolved
@stancl stancl changed the title Add encrypted casts support Add encrypted casts support + allow using the trait on multiple models Oct 31, 2023
@stancl stancl merged commit 72de33a into archtechx:master Nov 8, 2023
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants