假设我有多个用户 - 管理员,经理,用户。用户可以拥有他拥有的CRUD记录。管理员可以使用他和他的用户拥有的CRUD记录。管理员可以CRUD记录所有。如何在Laravel中实现这一目标?
答案 0 :(得分:0)
您可以创建一个中间件来验证当前用户的角色以及所选用户对该操作的角色。
答案 1 :(得分:0)
如果您只有一个角色,请使用中间件。
如果你有多个角色,就像你说你已经开始使用Laravel提供的大门/政策一样。
要处理管理员,您将在过滤器之前使用
public function before($user, $ability)
{
return ($user->is_admin) ? true : null; //return null so we continue authorising further
}
处理经理||用户你会沿着这些方向使用某些东西(最棘手的):
public someCRUDaction(User $current, Item $item) {
return $item->created_by == $current->id || $current->users->contains('id', $item->created_by); // you need to handle logic if item belongs to manager
}
注意:
$item->created_by == $current->id
是不言自明的,如果当前用户是商品的所有者,则处理
如何使用政策(我会选择政策)和大门:
https://laravel.com/docs/5.4/authorization#writing-policies
请记住,您不想只是$current
用户可以执行操作X来验证任何内容吗?
使用策略,您需要检查用户是否可以至少执行两次操作X(在视图和控制器/路由/自定义表单请求中 - 您处理验证的位置)。