授权不适用于用户搜索
Authorization not working for Users Search
我正在使用 Laravel 5.1.26,包括政策授权。我有一个基本的 ACL 模型,其中用户有一个角色,当然是一个整数角色字段。
我的角色是:
0 - 管理员(可以对用户执行任何操作);
1- 操作员(不能对用户执行任何操作);
2- 查看器(不能对用户执行任何操作)。
我提供了执行用户搜索的选项。由于我的角色定义,只有管理员可以执行此操作。所以,我在 UserController 中有一个方法来显示我的结果:
public function postSearch(Request $request)
{
$this->authorize('search', User::class);
$query = User::select('name', 'email')
->where('name', 'LIKE', "%$request->name%")
->where('email', 'LIKE', "%$request->email%")
->where('role', '=', "%$request->role%");
return $this->displayResult($query, $request);
}
如您所见,授权方法执行验证,其余代码创建结果。简单的。
问题是因为如果我搜索(在所有情况下都使用管理员用户)操作员用户,那么我的所有操作都会被禁用:创建、删除、编辑等。如果我搜索 Viewer 用户,行为相同。
但是如果我搜索管理员用户,那么我的所有操作都可以启用!
所以,我猜授权方法正在接收用户发现!未通过身份验证的用户。我该如何解决这个问题?我通过了 User::class,因为如果我什么都不通过,那么我的政策就不起作用(因此,我遵循了这里的最后一条评论 https://laracasts.com/discuss/channels/laravel/laravel-511s-new-authorization-doesnt-read-policies/?page=2)。
谢谢。
在我的应用程序上执行另一个搜索选项后,我发现 Eloquent 与平时有点不同,因此我在我的模型上创建了一个搜索方法。基本上执行此操作:
public function scopeSearch($query, $field, $value)
{
if(is_numeric($value))
return $query->where($field, '=', "$value");
else
return $query;
}
所以,我把原来的代码改成这样,我的角色是一个整数:
public function postSearch(Request $request)
{
$this->authorize('search', User::class);
$query = User::select('name', 'email')
->where('name', 'LIKE', "%$request->name%")
->where('email', 'LIKE', "%$request->email%")
->search('role', "$request->role");
return $this->displayResult($query, $request);
}
现在工作正常!
我正在使用 Laravel 5.1.26,包括政策授权。我有一个基本的 ACL 模型,其中用户有一个角色,当然是一个整数角色字段。
我的角色是: 0 - 管理员(可以对用户执行任何操作); 1- 操作员(不能对用户执行任何操作); 2- 查看器(不能对用户执行任何操作)。
我提供了执行用户搜索的选项。由于我的角色定义,只有管理员可以执行此操作。所以,我在 UserController 中有一个方法来显示我的结果:
public function postSearch(Request $request)
{
$this->authorize('search', User::class);
$query = User::select('name', 'email')
->where('name', 'LIKE', "%$request->name%")
->where('email', 'LIKE', "%$request->email%")
->where('role', '=', "%$request->role%");
return $this->displayResult($query, $request);
}
如您所见,授权方法执行验证,其余代码创建结果。简单的。
问题是因为如果我搜索(在所有情况下都使用管理员用户)操作员用户,那么我的所有操作都会被禁用:创建、删除、编辑等。如果我搜索 Viewer 用户,行为相同。
但是如果我搜索管理员用户,那么我的所有操作都可以启用!
所以,我猜授权方法正在接收用户发现!未通过身份验证的用户。我该如何解决这个问题?我通过了 User::class,因为如果我什么都不通过,那么我的政策就不起作用(因此,我遵循了这里的最后一条评论 https://laracasts.com/discuss/channels/laravel/laravel-511s-new-authorization-doesnt-read-policies/?page=2)。
谢谢。
在我的应用程序上执行另一个搜索选项后,我发现 Eloquent 与平时有点不同,因此我在我的模型上创建了一个搜索方法。基本上执行此操作:
public function scopeSearch($query, $field, $value)
{
if(is_numeric($value))
return $query->where($field, '=', "$value");
else
return $query;
}
所以,我把原来的代码改成这样,我的角色是一个整数:
public function postSearch(Request $request)
{
$this->authorize('search', User::class);
$query = User::select('name', 'email')
->where('name', 'LIKE', "%$request->name%")
->where('email', 'LIKE', "%$request->email%")
->search('role', "$request->role");
return $this->displayResult($query, $request);
}
现在工作正常!