Moderators can now create moderators and upgrade or downgrade other users, but not administrators

This commit is contained in:
mwalbeck 2016-10-30 00:37:15 +02:00
parent 0863dbb175
commit 1c28345ddf
6 changed files with 48 additions and 16 deletions

View file

@ -56,7 +56,7 @@ class AdministrativeUserController extends Controller
public function addUser(StoreUser $request)
{
$this->authorize('create', User::class);
$user = new User;
$user->addUser($request->all());
return redirect("/" . Auth::user()->getAdminPath() . '/users');

View file

@ -31,7 +31,7 @@ class StoreUser extends FormRequest
*
* @return array
*/
public function rules(User $user)
public function rules()
{
$start_pos = strpos(request()->path(), "users/")+6;
$length = strpos(request()->path(), "/edit")-$start_pos;
@ -48,7 +48,7 @@ class StoreUser extends FormRequest
"password" => "required|alpha_dash|min:8",
"group_id" => "integer|exists:groups,id|min:1",
"enabled" => "required|boolean",
"access_level" => "integer|min:1|max:3",
"access_level" => "required|integer|min:1|max:3|access_mod",
];
}
}

View file

@ -3,6 +3,8 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
class AppServiceProvider extends ServiceProvider
{
@ -13,7 +15,17 @@ class AppServiceProvider extends ServiceProvider
*/
public function boot()
{
//
Validator::extend('access_mod', function($attribute, $value, $parameters, $validator) {
if (Auth::user()->isAdministrator()) {
return true;
}
if (Auth::user()->isModerator()) {
return $value < 3;
}
return false;
});
}
/**

View file

@ -87,12 +87,16 @@ class User extends Authenticatable
$this->email = trim($request["email"]);
$this->passwordHash($request["password"]);
$this->enabled = $request["enabled"];
if (Auth::user()->isModerator()) {
Group::find(Auth::user()->group_id)->save($this);
return true;
}
$this->access_level = $request["access_level"];
$this->group_id = $request["group_id"];
if (Auth::user()->isModerator()) {
$this->group_id = Auth::user()->group_id;
}
if (Auth::user()->isAdministrator()) {
$this->group_id = $request["group_id"];
}
$this->save();
return true;
}

View file

@ -31,17 +31,25 @@
<div class="form-group">
<label>Enabled</label>
<select name="enabled" class="form-control">
<option value="1" @if ($user->enabled == 1) selected @endif>Yes</option>
<option value="0" @if ($user->enabled == 0) selected @endif>No</option>
<option value="1" @if ($user->enabled === 1) selected @endif>Yes</option>
<option value="0" @if ($user->enabled === 0) selected @endif>No</option>
</select>
</div>
@if (Auth::user()->isAdministrator())
@if (Auth::user()->isModerator())
<div class="form-group">
<label>Access Level</label>
<select name="access_level" class="form-control">
<option value="1" @if ($user->access_level == 1) selected @endif>User</option>
<option value="2" @if ($user->access_level == 2) selected @endif>Moderator</option>
<option value="3" @if ($user->access_level == 3) selected @endif>Administrator</option>
<option value="1" @if ($user->access_level === 1) selected @endif>User</option>
<option value="2" @if ($user->access_level === 2) selected @endif>Moderator</option>
</select>
</div>
@elseif (Auth::user()->isAdministrator())
<div class="form-group">
<label>Access Level</label>
<select name="access_level" class="form-control">
<option value="1" @if ($user->access_level === 1) selected @endif>User</option>
<option value="2" @if ($user->access_level === 2) selected @endif>Moderator</option>
<option value="3" @if ($user->access_level === 3) selected @endif>Administrator</option>
</select>
</div>
<div class="form-group">

View file

@ -35,7 +35,15 @@
<option value="0">No</option>
</select>
</div>
@if (Auth::user()->isAdministrator())
@if (Auth::user()->isModerator())
<div class="form-group">
<label>Access Level</label>
<select name="access_level" class="form-control">
<option value="1">User</option>
<option value="2">Moderator</option>
</select>
</div>
@elseif (Auth::user()->isAdministrator())
<div class="form-group">
<label>Access Level</label>
<select name="access_level" class="form-control">