Laravel 根据用户许可打印 select 选项
Laravel Print select options accordingly user's permission
祝你一切顺利。
我正在使用 spatie 的权限包来管理我的用户角色和权限。
我有 4 个角色
- 管理员
- 超级经销商
- 经销商
- 零售商
在我的用户创建过程中,我使用 Spatie\Permission\Models\Role
角色模型获取了所有角色...并且 foreach 循环生成 select 值,但这里出现了转折。
管理员可以创建各种类型的用户,但超级分销商只能创建分销商和零售商,分销商只能创建零售商。如何根据用户角色生成选项?
目前我写了这段代码,但它根本不起作用
<select wire:model="role" name="role" class="block mt-1 w-full border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm block mt-1 w-full">
<option value="" selected>Please select an option</option>
@forelse ($roles as $role)
@role('admin')
@if ($role == 'admin' || $role == 'super distributor' )
<option value="{{ $role->name }}">{{ Str::ucfirst($role->name) }}</option>
@endif
@endrole
@empty
<option >There is no roles available</option>
@endforelse
</select>
提前致谢
编辑:感谢 @Abdul Rehman 的解决方案。
我稍微编辑了一下,这是最终的解决方案
public function mount()
{
$this->roles = $this->getRoles();
}
public function getRoles()
{
return [
'admin' => Role::all(),
'super distributor' => Role::whereIn('name', ['distributor','retailer','user'])->get(),
'distributor' => Role::whereIn('name', ['retailer'])->get(),
'retailer' => [],
'user' => [],
][auth()->user()->roles->pluck('name')[0]];
}
从控制器处理这个事情不要获取所有角色获取基于哪个用户登录的角色。
喜欢
if(auth()->user()->hasRole('Admin')){
Role::all() //write query to fetch all roles
}
if(auth()->user()->hasRole('Super Distributor')){
Role::whereIn('id', [distributor_id,retailer_id])->get(); //write query to get only distributor and retailer role
}
像上面的查询一样得到其他的。
祝你一切顺利。
我正在使用 spatie 的权限包来管理我的用户角色和权限。
我有 4 个角色
- 管理员
- 超级经销商
- 经销商
- 零售商
在我的用户创建过程中,我使用 Spatie\Permission\Models\Role
角色模型获取了所有角色...并且 foreach 循环生成 select 值,但这里出现了转折。
管理员可以创建各种类型的用户,但超级分销商只能创建分销商和零售商,分销商只能创建零售商。如何根据用户角色生成选项?
目前我写了这段代码,但它根本不起作用
<select wire:model="role" name="role" class="block mt-1 w-full border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm block mt-1 w-full">
<option value="" selected>Please select an option</option>
@forelse ($roles as $role)
@role('admin')
@if ($role == 'admin' || $role == 'super distributor' )
<option value="{{ $role->name }}">{{ Str::ucfirst($role->name) }}</option>
@endif
@endrole
@empty
<option >There is no roles available</option>
@endforelse
</select>
提前致谢
编辑:感谢 @Abdul Rehman 的解决方案。
我稍微编辑了一下,这是最终的解决方案
public function mount()
{
$this->roles = $this->getRoles();
}
public function getRoles()
{
return [
'admin' => Role::all(),
'super distributor' => Role::whereIn('name', ['distributor','retailer','user'])->get(),
'distributor' => Role::whereIn('name', ['retailer'])->get(),
'retailer' => [],
'user' => [],
][auth()->user()->roles->pluck('name')[0]];
}
从控制器处理这个事情不要获取所有角色获取基于哪个用户登录的角色。
喜欢
if(auth()->user()->hasRole('Admin')){
Role::all() //write query to fetch all roles
}
if(auth()->user()->hasRole('Super Distributor')){
Role::whereIn('id', [distributor_id,retailer_id])->get(); //write query to get only distributor and retailer role
}
像上面的查询一样得到其他的。