Laravel Print 根据用户权限选择选项

问题描述

希望你一切顺利。

我正在使用 spatie 的权限包来管理我的用户的角色和权限。

我有 4 个角色

  1. 管理员
  2. 超级经销商
  3. 经销商
  4. 零售商

在我的用户创建中,我使用 Spatie\Permission\Models\Role 角色模型获取了所有角色......并且 foreach 循环以生成选择值,但这里出现了扭曲。 管理员可以创建所有类型的用户,但超级经销商只能创建经销商和零售商,经销商只能创建零售商。如何根据用户角色生成选项?

目前我写了这段代码,但它根本不起作用

<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
}

像上面的查询一样得到其他的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...