simplify player owner checking
This commit is contained in:
parent
f78d37cd6e
commit
e54fecd6e5
|
|
@ -22,7 +22,16 @@ class PlayerController extends Controller
|
||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->middleware([CheckPlayerOwner::class], [
|
$this->middleware(function (Request $request, $next) {
|
||||||
|
/** @var Player */
|
||||||
|
$player = $request->route('player');
|
||||||
|
if ($player->user->isNot($request->user())) {
|
||||||
|
return json(trans('admin.players.no-permission'), 1)
|
||||||
|
->setStatusCode(403);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $next($request);
|
||||||
|
}, [
|
||||||
'only' => ['delete', 'rename', 'setTexture', 'clearTexture'],
|
'only' => ['delete', 'rename', 'setTexture', 'clearTexture'],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use App\Models\Player;
|
|
||||||
use Closure;
|
|
||||||
use Illuminate\Support\Arr;
|
|
||||||
|
|
||||||
class CheckPlayerOwner
|
|
||||||
{
|
|
||||||
public function handle($request, Closure $next)
|
|
||||||
{
|
|
||||||
$pid = Arr::get($request->route()->parameters, 'pid') ?? $request->input('pid');
|
|
||||||
if ($pid && ($player = Player::find($pid)) && $player->uid != auth()->id()) {
|
|
||||||
return json(trans('admin.players.no-permission'), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $next($request);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -37,6 +37,20 @@ class PlayerControllerTest extends TestCase
|
||||||
->assertJson([$player->toArray()]);
|
->assertJson([$player->toArray()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testAccessControl()
|
||||||
|
{
|
||||||
|
$user = factory(User::class)->make();
|
||||||
|
$player = factory(Player::class)->create();
|
||||||
|
|
||||||
|
$this->actingAs($user)
|
||||||
|
->deleteJson(route('user.player.delete', ['player' => $player]))
|
||||||
|
->assertJson([
|
||||||
|
'code' => 1,
|
||||||
|
'message' => trans('admin.players.no-permission'),
|
||||||
|
])
|
||||||
|
->assertForbidden();
|
||||||
|
}
|
||||||
|
|
||||||
public function testAdd()
|
public function testAdd()
|
||||||
{
|
{
|
||||||
Event::fake();
|
Event::fake();
|
||||||
|
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace Tests;
|
|
||||||
|
|
||||||
use App\Models\Player;
|
|
||||||
use App\Models\User;
|
|
||||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
|
||||||
|
|
||||||
class CheckPlayerOwnerTest extends TestCase
|
|
||||||
{
|
|
||||||
use DatabaseTransactions;
|
|
||||||
|
|
||||||
public function testHandle()
|
|
||||||
{
|
|
||||||
$other_user = factory(User::class)->create();
|
|
||||||
$player = factory(Player::class)->create();
|
|
||||||
$owner = $player->user;
|
|
||||||
|
|
||||||
$this->actingAs($other_user)
|
|
||||||
->get('/user/player')
|
|
||||||
->assertSuccessful();
|
|
||||||
|
|
||||||
$this->actingAs($other_user)
|
|
||||||
->postJson('/user/player/rename/'.$player->pid)
|
|
||||||
->assertJson([
|
|
||||||
'code' => 1,
|
|
||||||
'message' => trans('admin.players.no-permission'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user