Laravel blade @can 策略 - 字符串
Laravel blade @can policy - string
我正在使用 Laravel 5.2。所以我正在学习如何处理角色和权限 Authorization。一切运行良好。我什至制定了自己的政策 PostPolicy。
现在进入正题。我将 $post 数据加载到 PostsController 的视图中,然后加载到 blade.
PostsController:
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
posts/show.blade.php:
@section('content')
<!-- begin -->
@can('hasRole', Auth::user())
<h1>Displaying Admin content</h1>
@endcan
@can('hasRole', Auth::user())
<h1>Displaying moderator content</h1>
@endcan
@can('hasRole', Auth::user())
<h1>Displaying guest content</h1>
@endcan
政策:
public function hasRole($user)
{
// just for test
return true;
}
至此return全部内容。
当我改变 @can('hasRole', Auth::user())
从
Auth::user() 到一个字符串,即
@can('hasRole', 'guest')
<h1>Displaying guest content</h1>
@endcan
在这种情况下,它没有 return 任何东西。由于我是 Laravel 的新手,我真的不知道它行不通。
您可能没有仔细阅读文档。您应该将模型作为第二个参数传递,而不是字符串或用户 object。在你的情况下,你可能应该使用这样的东西:
@section('content')
<!-- begin -->
@can('hasRole', $post)
<h1>Displaying Admin content</h1>
@endcan
@can('hasRole', $post)
<h1>Displaying moderator content</h1>
@endcan
@can('hasRole', $post)
<h1>Displaying guest content</h1>
@endcan
但问题是您真正想要实现的目标。如果只想使用用户角色来验证权限,则不需要使用此指令。
您可以添加到您的 User
模型函数来验证当前角色
public function hasRole($roleName)
{
return $this->role == $roleName; // sample implementation only
}
现在您可以在 blade:
中使用
@section('content')
<!-- begin -->
@if (auth()->check())
@if (auth()->user()->hasRole('admin'))
<h1>Displaying Admin content</h1>
@elseif (auth()->user()->hasRole('moderator'))
<h1>Displaying moderator content</h1>
@endif
@else
<h1>Displaying guest content</h1>
@endif
我正在使用 Laravel 5.2。所以我正在学习如何处理角色和权限 Authorization。一切运行良好。我什至制定了自己的政策 PostPolicy。
现在进入正题。我将 $post 数据加载到 PostsController 的视图中,然后加载到 blade.
PostsController:
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
posts/show.blade.php:
@section('content')
<!-- begin -->
@can('hasRole', Auth::user())
<h1>Displaying Admin content</h1>
@endcan
@can('hasRole', Auth::user())
<h1>Displaying moderator content</h1>
@endcan
@can('hasRole', Auth::user())
<h1>Displaying guest content</h1>
@endcan
政策:
public function hasRole($user)
{
// just for test
return true;
}
至此return全部内容。
当我改变 @can('hasRole', Auth::user())
从
Auth::user() 到一个字符串,即
@can('hasRole', 'guest')
<h1>Displaying guest content</h1>
@endcan
在这种情况下,它没有 return 任何东西。由于我是 Laravel 的新手,我真的不知道它行不通。
您可能没有仔细阅读文档。您应该将模型作为第二个参数传递,而不是字符串或用户 object。在你的情况下,你可能应该使用这样的东西:
@section('content')
<!-- begin -->
@can('hasRole', $post)
<h1>Displaying Admin content</h1>
@endcan
@can('hasRole', $post)
<h1>Displaying moderator content</h1>
@endcan
@can('hasRole', $post)
<h1>Displaying guest content</h1>
@endcan
但问题是您真正想要实现的目标。如果只想使用用户角色来验证权限,则不需要使用此指令。
您可以添加到您的 User
模型函数来验证当前角色
public function hasRole($roleName)
{
return $this->role == $roleName; // sample implementation only
}
现在您可以在 blade:
中使用@section('content')
<!-- begin -->
@if (auth()->check())
@if (auth()->user()->hasRole('admin'))
<h1>Displaying Admin content</h1>
@elseif (auth()->user()->hasRole('moderator'))
<h1>Displaying moderator content</h1>
@endif
@else
<h1>Displaying guest content</h1>
@endif