我使用的是Laravel 5.2。所以,我正在学习如何处理角色和权限Authorization。一切都运行良好。我甚至制定了自己的政策PostPolicy。
现在问题。我将$ post数据加载到PostsController中的视图中,然后加载到刀片中。
PostsController :
@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
文章/ show.blade.php :
public function hasRole($user)
{
// just for test
return true;
}
政策:
@can('hasRole', Auth::user())
现在返回所有内容。
当我更改@can('hasRole', 'guest')
<h1>Displaying guest content</h1>
@endcan
时
从
Auth :: user()到字符串,i.E。
var convertedToArray = Object.keys(MyKeyword).map(function (key) {return obj[key]});
在这种情况下,它不会返回任何内容。因为我是Laravel的新手,我真的不知道它不起作用。
答案 0 :(得分:2)
你可能还没有仔细阅读文档。您应该将第二个参数作为模型传递,而不是传递给字符串或用户对象。在你的情况下,你应该使用这样的东西:
@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
}
现在你可以在你的刀片中使用了:
@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