假设我有多个用户-管理员,经理,用户。用户可以使用他拥有的CRUD记录。经理可以查看他和他的用户拥有的记录。管理员可以CRUD所有的记录。如何在Laravel实现这一点?
发布于 2017-06-07 09:07:25
如果您只有一个角色,请使用中间件。
如果您有多个角色,就像您说的那样,您可以使用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(在视图和控制器/路由/自定义表单请求中-在这里处理验证)。
发布于 2017-06-07 08:35:56
您可以创建一个中间件,用于验证当前用户的角色和操作所选用户的角色。
https://stackoverflow.com/questions/44407356
复制相似问题