【问题标题】:Laravel Gates and/or PoliciesLaravel 盖茨和/或政策
【发布时间】:2019-01-16 14:45:04
【问题描述】:

现在我正在考虑在我的项目中实施政策。 所以我想要 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 功能(因此客户只能使用自己的数据执行此操作)。

我读了这篇文章: https://code.tutsplus.com/tutorials/gates-and-policies-in-laravel--cms-29780

但我仍然不知道如何在我的项目中实现它,以及我应该使用 Gates 还是策略(似乎策略更容易,或者?)。

如果有人能给我写一个关于如何在我的工作中实现它的示例,我将非常感激。

【问题讨论】:

标签: php laravel


【解决方案1】:

为您的每个模型创建策略。绑定策略到路由https://laravel.com/docs/5.6/authorization#via-middleware

Route::post('/post/{post}', function () {
// The current user may edit post...
})->middleware('can:edit,post');

创建一个父策略,所有其他策略都将扩展并添加到它的 before 方法,该方法基本上会检查您的用户是否是管理员,如果是则不需要进一步检查。

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;
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2021-07-12
    相关资源
    最近更新 更多