53
common/Auth/Actions/CreateUser.php
Executable file
53
common/Auth/Actions/CreateUser.php
Executable file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Auth\Actions;
|
||||
|
||||
use App\Models\User;
|
||||
use Common\Auth\Events\UserCreated;
|
||||
use Common\Auth\Permissions\Traits\SyncsPermissions;
|
||||
use Common\Auth\Roles\Role;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class CreateUser
|
||||
{
|
||||
use SyncsPermissions;
|
||||
|
||||
public function execute(array $params): User
|
||||
{
|
||||
if (
|
||||
!settings('require_email_confirmation') &&
|
||||
!array_key_exists('email_verified_at', $params)
|
||||
) {
|
||||
$params['email_verified_at'] = now();
|
||||
}
|
||||
|
||||
$geoData = geoip(getIp());
|
||||
$params['language'] = $params['language'] ?? config('app.locale');
|
||||
$params['country'] =
|
||||
$params['country'] ?? ($geoData['iso_code'] ?? null);
|
||||
$params['timezone'] =
|
||||
$params['timezone'] ?? ($geoData['timezone'] ?? null);
|
||||
|
||||
$user = User::create(Arr::except($params, ['roles', 'permissions']));
|
||||
|
||||
if (array_key_exists('roles', $params)) {
|
||||
$user->roles()->attach($params['roles']);
|
||||
}
|
||||
|
||||
// if no roles were attached, assign default role
|
||||
if ($user->roles()->count() === 0) {
|
||||
$defaultRole = app(Role::class)->getDefaultRole();
|
||||
if ($defaultRole) {
|
||||
$user->roles()->attach($defaultRole->id);
|
||||
}
|
||||
}
|
||||
|
||||
if (array_key_exists('permissions', $params)) {
|
||||
$this->syncPermissions($user, $params['permissions']);
|
||||
}
|
||||
|
||||
event(new UserCreated($user, $params));
|
||||
|
||||
return $user;
|
||||
}
|
||||
}
|
||||
68
common/Auth/Actions/DeleteUsers.php
Executable file
68
common/Auth/Actions/DeleteUsers.php
Executable file
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Auth\Actions;
|
||||
|
||||
use App\Models\User;
|
||||
use Common\Auth\ActiveSession;
|
||||
use Common\Auth\Ban;
|
||||
use Common\Auth\Events\UsersDeleted;
|
||||
use Common\Billing\Subscription;
|
||||
use Common\Csv\CsvExport;
|
||||
use Common\Domains\Actions\DeleteCustomDomains;
|
||||
use Common\Domains\CustomDomain;
|
||||
use Common\Files\Actions\Deletion\PermanentlyDeleteEntries;
|
||||
use Common\Pages\CustomPage;
|
||||
|
||||
class DeleteUsers
|
||||
{
|
||||
public function execute(array $ids): int
|
||||
{
|
||||
$users = User::whereIn('id', $ids)->get();
|
||||
|
||||
$users->each(function (User $user) {
|
||||
$user->social_profiles()->delete();
|
||||
$user->roles()->detach();
|
||||
$user->notifications()->delete();
|
||||
$user->permissions()->detach();
|
||||
|
||||
if ($user->subscribed()) {
|
||||
$user->subscriptions->each(function (
|
||||
Subscription $subscription,
|
||||
) {
|
||||
$subscription->cancelAndDelete();
|
||||
});
|
||||
}
|
||||
|
||||
$user->delete();
|
||||
|
||||
$entryIds = $user
|
||||
->entries(['owner' => true])
|
||||
->pluck('file_entries.id');
|
||||
app(PermanentlyDeleteEntries::class)->execute($entryIds);
|
||||
});
|
||||
|
||||
// delete domains
|
||||
$domainIds = app(CustomDomain::class)
|
||||
->whereIn('user_id', $ids)
|
||||
->pluck('id');
|
||||
app(DeleteCustomDomains::class)->execute($domainIds->toArray());
|
||||
|
||||
// delete custom pages
|
||||
CustomPage::whereIn('user_id', $ids)->delete();
|
||||
|
||||
// delete sessions
|
||||
ActiveSession::whereIn('user_id', $ids)->delete();
|
||||
|
||||
// csv exports
|
||||
CsvExport::whereIn('user_id', $ids)->delete();
|
||||
|
||||
// bans
|
||||
Ban::where('bannable_type', User::MODEL_TYPE)
|
||||
->whereIn('bannable_id', $ids)
|
||||
->delete();
|
||||
|
||||
event(new UsersDeleted($users));
|
||||
|
||||
return $users->count();
|
||||
}
|
||||
}
|
||||
62
common/Auth/Actions/PaginateUsers.php
Executable file
62
common/Auth/Actions/PaginateUsers.php
Executable file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Auth\Actions;
|
||||
|
||||
use App\Models\User;
|
||||
use Common\Database\Datasource\Datasource;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Pagination\AbstractPaginator;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class PaginateUsers
|
||||
{
|
||||
public function execute(array $params): AbstractPaginator
|
||||
{
|
||||
$query = User::with(['roles', 'permissions']);
|
||||
|
||||
if ($roleId = Arr::get($params, 'roleId')) {
|
||||
$relation = $query->getModel()->roles();
|
||||
$query
|
||||
->leftJoin(
|
||||
$relation->getTable(),
|
||||
$relation->getQualifiedParentKeyName(),
|
||||
'=',
|
||||
$relation->getQualifiedForeignPivotKeyName(),
|
||||
)
|
||||
->where(
|
||||
$relation->getQualifiedRelatedPivotKeyName(),
|
||||
'=',
|
||||
$roleId,
|
||||
);
|
||||
$query->select(['users.*', 'user_role.created_at as created_at']);
|
||||
}
|
||||
|
||||
if ($roleName = Arr::get($params, 'roleName')) {
|
||||
$query->whereHas(
|
||||
'roles',
|
||||
fn(Builder $q) => $q->where('roles.name', $roleName),
|
||||
);
|
||||
}
|
||||
|
||||
if ($permission = Arr::get($params, 'permission')) {
|
||||
$query
|
||||
->whereHas(
|
||||
'permissions',
|
||||
fn(Builder $query) => $query
|
||||
->where('name', $permission)
|
||||
->orWhere('name', 'admin'),
|
||||
)
|
||||
->orWhereHas(
|
||||
'roles',
|
||||
fn(Builder $query) => $query->whereHas(
|
||||
'permissions',
|
||||
fn(Builder $query) => $query
|
||||
->where('name', $permission)
|
||||
->orWhere('name', 'admin'),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return (new Datasource($query, $params))->paginate();
|
||||
}
|
||||
}
|
||||
28
common/Auth/Actions/UpdateUser.php
Executable file
28
common/Auth/Actions/UpdateUser.php
Executable file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Common\Auth\Actions;
|
||||
|
||||
use App\Models\User;
|
||||
use Common\Auth\Permissions\Traits\SyncsPermissions;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class UpdateUser
|
||||
{
|
||||
use SyncsPermissions;
|
||||
|
||||
public function execute(User $user, array $params): User
|
||||
{
|
||||
$user->fill(Arr::except($params, ['roles', 'permissions']))->save();
|
||||
|
||||
// make sure roles and permission are not removed
|
||||
// if they are not specified at all in params
|
||||
if (array_key_exists('roles', $params)) {
|
||||
$user->roles()->sync($params['roles']);
|
||||
}
|
||||
if (array_key_exists('permissions', $params)) {
|
||||
$this->syncPermissions($user, Arr::get($params, 'permissions'));
|
||||
}
|
||||
|
||||
return $user->load(['roles', 'permissions']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user