【问题标题】:Laravel authorization policy not working on Show pageLaravel 授权策略在显示页面上不起作用
【发布时间】:2021-04-20 07:26:30
【问题描述】:

我有一个使用策略分配角色和权限的 laravel 应用程序,我似乎无法访问显示页面并且我不确定我做错了什么? 如果我设置 return true 它仍然显示 403 错误,所以我不确定我哪里出错了。索引页可访问,但显示页不可访问?

用户策略

public function viewAny(User $user)
{
    if ($user->isSuperAdmin() || $user->hasPermissionTo(44, 'web')) {
        return true;
    }
    return false;
}

public function view(User $user, User $model)
{
    if ($user->isSuperAdmin() || $user->hasPermissionTo(44, 'web')) {
        return true;
    }
    return false;
}

用户控制器

public function __construct()
{
    $this->authorizeResource(User::class, 'user');

}

public function index()
{
    $page_title = 'Users';
    $page_description = 'User Profiles';
    $users = User::all();

    return view('pages.users.users.index', compact('page_title', 'page_description', 'users'));
}

public function create()
{
    //
}

public function store(Request $request)
{
    //
}

public function show($id)
{
    $user = User::findOrFail($id);
    $user_roles = $user->getRoleNames()->toArray();


    return view('pages.users.users.show', compact('user', 'user_roles'));
}

【问题讨论】:

  • 你有没有在你的控制器上放任何中间件,如果你应该登录查看页面
  • 我在控制器上有中间件并已登录
  • 也许你应该把User::class是经过身份验证的用户的实例,比如Auth::user()

标签: laravel


【解决方案1】:

基于 Authorize ResourceResource Controller 文档。

你应该运行php artisan make:policy UserPolicy --model=User。这允许策略在模型中导航。

当您使用authorizeResource() 函数时,您应该在中间件中实现您的条件,例如:

// For Index
Route::get('/users', [UserController::class, 'index'])->middleware('can:viewAny,user');

// For View
Route::get('/users/{user}', [UserController::class, 'view'])->middleware('can:view,user');

或者您也可以在控制器上为 viewindex 使用一个策略。

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 2017-02-05
    • 1970-01-01
    • 2021-06-29
    • 2019-05-04
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多