【发布时间】:2016-12-08 16:11:14
【问题描述】:
我正在尝试创建一个项目来添加编辑联系人。
为了限制用户可以添加/编辑自己的联系人,所以添加了策略 ContactPolicy 如下
<?php
namespace App\Policies;
use Illuminate\Auth\Access\HandlesAuthorization;
use App\User;
use App\Contact;
class ContactPolicy
{
use HandlesAuthorization;
/**
* Create a new policy instance.
*
* @return void
*/
public function __construct()
{
//
}
public function before($user, $ability)
{
if ($user->isAdmin == 1) {
return true;
}
}
public function add_contact(User $user)
{
return $user->id;
}
public function update_contact(User $user, Contact $contact)
{
return $user->id === $contact->user_id;
}
}
并在 AuthServiceProvider 中注册如下
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
Contact::class => ContactPolicy::class,
];
为了限制当前用户添加联系人,我在我的控制器函数中添加了 Gate,如下所示,没有传递参数
if (Gate::denies('add_contact')) {
return response('Unauthorized.', 401);
}
即使当前用户尝试添加联系人,它也会显示未经授权的消息。
我将如何解决这个问题?
【问题讨论】:
-
该方法必须返回一个布尔值,但是您的 add_contact() 方法返回
return $user->id;并且它可能不起作用,因为您需要一个参数 $user 从控制器调用门时不包括在内。
标签: laravel laravel-5.2