userfrosting / UserFrosting

Modern PHP user login and management framework
https://www.userfrosting.com
Other
1.64k stars 366 forks source link

Use model events to handle different modes of user deletion #819

Open alexweissman opened 6 years ago

alexweissman commented 6 years ago

Discussed in #785. Basically we should stop overriding User::delete, and instead factor out this code and its decision points into model events and controller methods.

The way I see it, we might have three modes of deletion:

It's possible that if we make all related entities have nullable FKs, then medium-delete and hard-delete can be essentially the same thing.

This also brings up the question of what to do when a new user wants to use the username/email of an account that was deleted previously.

splitt3r commented 6 years ago

I think adding pre and postDelete events would be a pretty nice solution. That way a sprinkle could listen to e.g. user.preDelete / onPreUserDelete (http://symfony.com/doc/current/components/event_dispatcher/generic_event.html & https://learn.userfrosting.com/services/default-services#eventdispatcher) and remove everything so that there won´t be any constraint problems. And perhaps rename the events to follow https://symfony.com/doc/current/components/event_dispatcher.html#naming-conventions.

alexweissman commented 6 years ago

So actually, Eloquent already supports model events: https://laravel.com/docs/5.4/eloquent#events

splitt3r commented 6 years ago

Looks great :+1: