现在,我正在考虑在我的项目中实施政策。 所以我想要三种类型的角色:用户,管理员和办公室。
我有一个具有以下CRUD功能的Customer类:
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功能)。
我阅读了这篇文章: https://code.tutsplus.com/tutorials/gates-and-policies-in-laravel--cms-29780
但是我仍然不知道到底该如何在我的项目中实现它,以及我是否应该使用Gates或策略(似乎策略更容易,还是?)。
如果有人能给我写一个关于如何在我的工作中实现它的示例,我将非常感激。
答案 0 :(得分: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');
创建一个父策略,所有其他策略都将扩展该父策略,并在其之前方法中将其添加到该策略中,该方法将基本上检查您的用户是否为管理员,是否需要进一步检查。
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;
}
}
关于如何使用策略的一般想法就这么简单。