如何向登录用户检索的角色添加条件
How to add condition to the Roles retrieved by logged user
我在 Laravel-5.8 应用程序中使用 Spatie RBAC
我的用户控制器和视图中有这段代码:
用户控制器
public function create()
{
$roles = Role::get()->pluck('name', 'name');
return view('admin.users.create', compact('roles','companies'));
}
public function edit(User $user)
{
$companies = OrgCompany::all();
$roles = Role::get()->pluck('name', 'name');
return view('admin.users.edit', compact('roles', 'user','companies'));
}
查看
<div class="form-group {{ $errors->has('roles') ? 'has-error' : '' }}">
<label for="roles">
{{ trans('global.user.fields.roles') }}*
<span class="btn btn-info btn-xs select-all">Select all</span>
<span class="btn btn-info btn-xs deselect-all">Deselect all</span>
</label>
<select name="roles[]" id="roles" class="form-control select2" multiple="multiple">
@foreach($roles as $id => $roles)
<option value="{{ $id }}" {{ (in_array($id, old( 'roles', [])) || isset($user) && $user->roles->contains($id)) ? 'selected' : '' }}> {{ $roles }}
</option>
@endforeach
</select>
@if($errors->has('roles'))
<p class="help-block">
{{ $errors->first('roles') }}
</p>
@endif
</div>
如果登录用户的角色不是“超级管理员”,角色 select 下拉列表应检索除“超级管理员”以外的其他角色。但是如果登录的用户是“超级管理员”,它应该检索包括“超级管理员”在内的所有角色。
如果 $request->user
没有角色 Super Admin
,您可以使用 when
过滤角色
public function create(Request $request)
{
$roles = Role::query()
->when(! $request->user->hasRole('Super Admin'), function($query) {
return $query->where('name', '!=', 'Super Admin');
})
->get()
->pluck('name', 'name');
return view('admin.users.create', compact('roles','companies'));
}
public function edit(Request $request, User $user)
{
$companies = OrgCompany::all();
$roles = Role::query()
->when(! $request->user->hasRole('Super Admin'), function($query) {
return $query->where('name', '!=', 'Super Admin');
})
->get()
->pluck('name', 'name');
return view('admin.users.edit', compact('roles', 'user','companies'));
}
我在 Laravel-5.8 应用程序中使用 Spatie RBAC
我的用户控制器和视图中有这段代码:
用户控制器
public function create()
{
$roles = Role::get()->pluck('name', 'name');
return view('admin.users.create', compact('roles','companies'));
}
public function edit(User $user)
{
$companies = OrgCompany::all();
$roles = Role::get()->pluck('name', 'name');
return view('admin.users.edit', compact('roles', 'user','companies'));
}
查看
<div class="form-group {{ $errors->has('roles') ? 'has-error' : '' }}">
<label for="roles">
{{ trans('global.user.fields.roles') }}*
<span class="btn btn-info btn-xs select-all">Select all</span>
<span class="btn btn-info btn-xs deselect-all">Deselect all</span>
</label>
<select name="roles[]" id="roles" class="form-control select2" multiple="multiple">
@foreach($roles as $id => $roles)
<option value="{{ $id }}" {{ (in_array($id, old( 'roles', [])) || isset($user) && $user->roles->contains($id)) ? 'selected' : '' }}> {{ $roles }}
</option>
@endforeach
</select>
@if($errors->has('roles'))
<p class="help-block">
{{ $errors->first('roles') }}
</p>
@endif
</div>
如果登录用户的角色不是“超级管理员”,角色 select 下拉列表应检索除“超级管理员”以外的其他角色。但是如果登录的用户是“超级管理员”,它应该检索包括“超级管理员”在内的所有角色。
如果 $request->user
没有角色 Super Admin
when
过滤角色
public function create(Request $request)
{
$roles = Role::query()
->when(! $request->user->hasRole('Super Admin'), function($query) {
return $query->where('name', '!=', 'Super Admin');
})
->get()
->pluck('name', 'name');
return view('admin.users.create', compact('roles','companies'));
}
public function edit(Request $request, User $user)
{
$companies = OrgCompany::all();
$roles = Role::query()
->when(! $request->user->hasRole('Super Admin'), function($query) {
return $query->where('name', '!=', 'Super Admin');
})
->get()
->pluck('name', 'name');
return view('admin.users.edit', compact('roles', 'user','companies'));
}