mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
Fixed name retrieval on missing users and added tests to cover along with some test helper methods
This commit is contained in:
parent
123dc11583
commit
af33156369
@ -159,16 +159,14 @@ class UserController extends Controller
|
|||||||
$this->checkPermissionOr('user-delete', function () use ($id) {
|
$this->checkPermissionOr('user-delete', function () use ($id) {
|
||||||
return $this->currentUser->id == $id;
|
return $this->currentUser->id == $id;
|
||||||
});
|
});
|
||||||
$user = $this->userRepo->getById($id);
|
|
||||||
|
|
||||||
// Delete social accounts
|
$user = $this->userRepo->getById($id);
|
||||||
if ($this->userRepo->isOnlyAdmin($user)) {
|
if ($this->userRepo->isOnlyAdmin($user)) {
|
||||||
session()->flash('error', 'You cannot delete the only admin');
|
session()->flash('error', 'You cannot delete the only admin');
|
||||||
return redirect($user->getEditUrl());
|
return redirect($user->getEditUrl());
|
||||||
}
|
}
|
||||||
|
$this->userRepo->destroy($user);
|
||||||
|
|
||||||
$user->socialAccounts()->delete();
|
|
||||||
$user->delete();
|
|
||||||
return redirect('/users');
|
return redirect('/users');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -46,16 +46,21 @@ class UserRepo
|
|||||||
public function registerNew(array $data)
|
public function registerNew(array $data)
|
||||||
{
|
{
|
||||||
$user = $this->create($data);
|
$user = $this->create($data);
|
||||||
$roleId = \Setting::get('registration-role');
|
$this->attachDefaultRole($user);
|
||||||
|
|
||||||
if ($roleId === false) {
|
|
||||||
$roleId = $this->role->getDefault()->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
$user->attachRoleId($roleId);
|
|
||||||
return $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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the give user is the only admin.
|
* Checks if the give user is the only admin.
|
||||||
* @param User $user
|
* @param User $user
|
||||||
@ -88,4 +93,14 @@ class UserRepo
|
|||||||
'password' => bcrypt($data['password'])
|
'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();
|
||||||
|
}
|
||||||
}
|
}
|
@ -32,6 +32,8 @@ body.dragging, body.dragging * {
|
|||||||
.avatar {
|
.avatar {
|
||||||
border-radius: 100%;
|
border-radius: 100%;
|
||||||
background-color: #EEE;
|
background-color: #EEE;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
&.med {
|
&.med {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
<p class="text-muted small">
|
<p class="text-muted small">
|
||||||
Created {{$book->created_at->diffForHumans()}} @if($book->createdBy) by {{$book->createdBy->name}} @endif
|
Created {{$book->created_at->diffForHumans()}} @if($book->createdBy) by {{$book->createdBy->name}} @endif
|
||||||
<br>
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -56,7 +56,7 @@
|
|||||||
<p class="text-muted small">
|
<p class="text-muted small">
|
||||||
Created {{$chapter->created_at->diffForHumans()}} @if($chapter->createdBy) by {{$chapter->createdBy->name}} @endif
|
Created {{$chapter->created_at->diffForHumans()}} @if($chapter->createdBy) by {{$chapter->createdBy->name}} @endif
|
||||||
<br>
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-3 col-md-offset-1">
|
<div class="col-md-3 col-md-offset-1">
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
<p class="text-muted small">
|
<p class="text-muted small">
|
||||||
Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by {{$page->createdBy->name}} @endif
|
Created {{$page->created_at->diffForHumans()}} @if($page->createdBy) by {{$page->createdBy->name}} @endif
|
||||||
<br>
|
<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>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
<div class="right">
|
<div class="right">
|
||||||
@if($activity->user)
|
@if($activity->user)
|
||||||
{{$activity->user->name}}
|
{{$activity->user->name}}
|
||||||
|
@else
|
||||||
|
A deleted user
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
{{ $activity->getText() }}
|
{{ $activity->getText() }}
|
||||||
|
@ -171,4 +171,29 @@ class EntityTest extends TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,40 @@ class TestCase extends Illuminate\Foundation\Testing\TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Assert that a given string is seen inside an element.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user