Php 拉威尔·盖茨和/或政策

Php 拉威尔·盖茨和/或政策,php,laravel,Php,Laravel,现在我正在考虑在我的项目中实施政策。 所以我想要3种角色:用户、管理员和办公室 我有一个Customer类,它具有以下CRUD函数: class CustomerController extends Controller { public function getAllCustomer() { return Customer::get(); } public function addNewCustomer(Request $request) { $validatedData

现在我正在考虑在我的项目中实施政策。 所以我想要3种角色:用户、管理员和办公室

我有一个Customer类,它具有以下CRUD函数:

class CustomerController extends Controller
{

public function getAllCustomer()
{
    return Customer::get();
}

public function addNewCustomer(Request $request)
{
    $validatedData = $request->validate([
        'Title' => 'required',
        'Name' => 'required|max:255',
        'Surname' => 'required|max:255',
        'Email' => 'required',
        'Phone' => 'required',
        'Password' => 'required',
        'dateofBirth' => 'required'
    ]);

    return \app\model\Customer::create($request->all());
}


public function update (Request $request , Customer $id)
{
    $id->update($request->all());
}


public function destroy (Customer $id)
{
    $id->delete();
}
我想要的是,只有管理员才能为所有客户使用CRUD函数。用户应该只能对自己的数据使用CRUD函数(因此客户只能对自己的数据使用CRUD函数)

我读了这篇文章:

但我仍然不知道如何在我的项目中实现它,以及我是否应该使用门或策略(看起来策略更容易,还是?)


如果有人能给我写一个如何在我的工作中实施的例子,我将非常感激。

为您的每个模型创建策略。将策略绑定到路由

创建一个父策略,所有其他策略将扩展并添加到该父策略中,然后再使用方法,该方法将基本上检查您的用户是否为管理员,如果是,则无需进一步检查

public function before(User $authenticatedUser, $ability)
{
    // super admin can access everything
    if ($authenticatedUser->role == 'super_admin') {
        return true;
    }

    return null; //fall through to the policy method
}
创建具有编辑权限检查的发布策略

class PostPolicy extends Policy
{

    public function edit(User $authenticatedUser, Post $post)
    {
        return $authenticatedUser->id == $post->author_id;
    }
}

关于如何使用策略的一般想法就这么简单。

为每个模型创建策略。将策略绑定到路由

创建一个父策略,所有其他策略将扩展并添加到该父策略中,然后再使用方法,该方法将基本上检查您的用户是否为管理员,如果是,则无需进一步检查

public function before(User $authenticatedUser, $ability)
{
    // super admin can access everything
    if ($authenticatedUser->role == 'super_admin') {
        return true;
    }

    return null; //fall through to the policy method
}
创建具有编辑权限检查的发布策略

class PostPolicy extends Policy
{

    public function edit(User $authenticatedUser, Post $post)
    {
        return $authenticatedUser->id == $post->author_id;
    }
}

关于如何使用政策的总体思路就这么简单。

您看过官方文档了吗?是的,但我没有为不同的榜样找到解决方案。你看过官方文件吗?是的,但是我没有为不同的榜样找到解决方案。