我在Request类中有以下代码来检查用户是否有权执行更新。
默认情况下, HandlesAuthorization trait
会显示默认消息。有没有办法返回自定义消息?我看到Request class
中的授权方法只能return boolean
值。
class UpdateRoleRequest extends Request
{
private $UserPermissionsSession;
public function __construct(IRole $Role) {
$this->UserPermissionsSession = new UserPermissionsSession();
}
public function authorize() {
$UserID = \Auth::user()->UserID;
return $this->UserPermissionsSession->CheckPermissionExists($UserID);
}
}
答案 0 :(得分:5)
我相信你不应该看HandlesAuthorization
特质。您需要做的就是在请求类中实现failedAuthorization
方法。
在FormRequest
课程中,它定义如下:
/**
* Handle a failed authorization attempt.
*
* @return void
*
* @throws \Illuminate\Auth\Access\AuthorizationException
*/
protected function failedAuthorization()
{
throw new AuthorizationException('This action is unauthorized.');
}
所以你需要的是在你的UpdateRoleRequest
类中覆盖这个方法,例如:
protected function failedAuthorization()
{
throw new \Illuminate\Auth\Access\AuthorizationException('User has to be an admin.');
}
答案 1 :(得分:1)
为其他有同样疑问的人提供回答@Pooria Honarmand 问题的解决方案;
如果您已经在 authorize
方法中检查了针对不同条件的更具体的消息,并且您不想在此处重复这些检查,只需引入一个或多个基于类的变量即可。
这是一个只有一个条件的例子,它会导致非标准消息: private bool $hasMissingClientId = false;
public function authorize(): bool
{
// several other checks
if (empty($user->client_id)) {
$this->hasMissingClientId = true;
return false;
}
return true;
}
protected function failedAuthorization()
{
if ($this->hasMissingClientId) {
throw new AuthorizationException('User has to be assigned to specific client.');
}
parent::failedAuthorization();
}