$this->checkPermissionOr('user-delete', function () use ($id) {
return $this->currentUser->id == $id;
});
- $user = $this->userRepo->getById($id);
- // Delete social accounts
+ $user = $this->userRepo->getById($id);
if ($this->userRepo->isOnlyAdmin($user)) {
session()->flash('error', 'You cannot delete the only admin');
return redirect($user->getEditUrl());
}
+ $this->userRepo->destroy($user);
- $user->socialAccounts()->delete();
- $user->delete();
return redirect('/users');
}
}
public function registerNew(array $data)
{
$user = $this->create($data);
- $roleId = \Setting::get('registration-role');
-
- if ($roleId === false) {
- $roleId = $this->role->getDefault()->id;
- }
+ $this->attachDefaultRole($user);
+ return $user;
+ }
+ /**
+ * Give a user the default role. Used when creating a new user.
+ * @param $user
+ */
+ public function attachDefaultRole($user)
+ {
+ $roleId = \Setting::get('registration-role');
+ if ($roleId === false) $roleId = $this->role->getDefault()->id;
$user->attachRoleId($roleId);
- return $user;
}
/**
'password' => bcrypt($data['password'])
]);
}
+
+ /**
+ * Remove the given user from storage, Delete all related content.
+ * @param User $user
+ */
+ public function destroy(User $user)
+ {
+ $user->socialAccounts()->delete();
+ $user->delete();
+ }
}
\ No newline at end of file
.avatar {
border-radius: 100%;
background-color: #EEE;
+ width: 30px;
+ height: 30px;
&.med {
width: 40px;
height: 40px;
<p class="text-muted small">
Created {{$book->created_at->diffForHumans()}} @if($book->createdBy) by {{$book->createdBy->name}} @endif
<br>
- Last Updated {{$book->updated_at->diffForHumans()}} @if($book->createdBy) by {{$book->updatedBy->name}} @endif
+ Last Updated {{$book->updated_at->diffForHumans()}} @if($book->updatedBy) by {{$book->updatedBy->name}} @endif
</p>
</div>
</div>
<p class="text-muted small">
Created {{$chapter->created_at->diffForHumans()}} @if($chapter->createdBy) by {{$chapter->createdBy->name}} @endif
<br>
- Last Updated {{$chapter->updated_at->diffForHumans()}} @if($chapter->createdBy) by {{$chapter->updatedBy->name}} @endif
+ Last Updated {{$chapter->updated_at->diffForHumans()}} @if($chapter->updatedBy) by {{$chapter->updatedBy->name}} @endif
</p>
</div>
<div class="col-md-3 col-md-offset-1">
<p class="text-muted small">
Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by {{$page->createdBy->name}} @endif
<br>
- Last Updated {{$page->updated_at->diffForHumans()}} @if($page->createdBy) by {{$page->updatedBy->name}} @endif
+ Last Updated {{$page->updated_at->diffForHumans()}} @if($page->updatedBy) by {{$page->updatedBy->name}} @endif
</p>
</div>
<div class="right">
@if($activity->user)
{{$activity->user->name}}
+ @else
+ A deleted user
@endif
{{ $activity->getText() }}
}
+ public function testEntitiesViewableAfterCreatorDeletion()
+ {
+ $creator = $this->getNewUser();
+ $updater = $this->getNewUser();
+ $entities = $this->createEntityChainBelongingToUser($creator, $updater);
+ app('BookStack\Repos\UserRepo')->destroy($creator);
+
+ $this->asAdmin()->visit($entities['book']->getUrl())->seeStatusCode(200)
+ ->visit($entities['chapter']->getUrl())->seeStatusCode(200)
+ ->visit($entities['page']->getUrl())->seeStatusCode(200);
+ }
+
+ public function testEntitiesViewableAfterUpdaterDeletion()
+ {
+ $creator = $this->getNewUser();
+ $updater = $this->getNewUser();
+ $entities = $this->createEntityChainBelongingToUser($creator, $updater);
+ app('BookStack\Repos\UserRepo')->destroy($updater);
+
+ $this->asAdmin()->visit($entities['book']->getUrl())->seeStatusCode(200)
+ ->visit($entities['chapter']->getUrl())->seeStatusCode(200)
+ ->visit($entities['page']->getUrl())->seeStatusCode(200);
+ }
+
+
}
}
}
+ /**
+ * Create a group of entities that belong to a specific user.
+ * @param $creatorUser
+ * @param $updaterUser
+ * @return array
+ */
+ protected function createEntityChainBelongingToUser($creatorUser, $updaterUser = false)
+ {
+ if ($updaterUser === false) $updaterUser = $creatorUser;
+ $book = factory(BookStack\Book::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]);
+ $chapter = factory(BookStack\Chapter::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id]);
+ $page = factory(BookStack\Page::class)->create(['created_by' => $creatorUser->id, 'updated_by' => $updaterUser->id, 'book_id' => $book->id]);
+ $book->chapters()->saveMany([$chapter]);
+ $chapter->pages()->saveMany([$page]);
+ return [
+ 'book' => $book,
+ 'chapter' => $chapter,
+ 'page' => $page
+ ];
+ }
+
+ /**
+ * Quick way to create a new user
+ * @param array $attributes
+ * @return mixed
+ */
+ protected function getNewUser($attributes = [])
+ {
+ $user = factory(\BookStack\User::class)->create($attributes);
+ $userRepo = app('BookStack\Repos\UserRepo');
+ $userRepo->attachDefaultRole($user);
+ return $user;
+ }
+
/**
* Assert that a given string is seen inside an element.
*