我试图编辑管理信息使用自定义规则,我希望管理员能够重置她的电子邮件时,她编辑她的信息,但不重置她的电子邮件给其他人。
这是我的自定义规则checkAdminEmailExist.php,请在有问题的地方纠正它
<?php
namespace App\Rules;
use App\Repositories\Interfaces\AdminRepositoryInterface;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Auth;
class checkAdminEmailExist implements Rule
{
public AdminRepositoryInterface $admin_repository;
public function __construct()
{
$this->admin_repository = app()->make(AdminRepositoryInterface::class);
}
public function passes($attribute, $value):bool
{
if($value == Auth::user()->email) {
return true;
}
if ($this->admin_repository->checkAdminEmailExist($value)) {
return false;
}
return true;
}
public function message():string
{
return 'The :attribute duplicate';
}
}发布于 2022-06-05 05:31:21
您可以尝试利用afterHook,如
class UpdateUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
/** Other rules **/
'email' => ['required', 'email'],
];
}
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
$alreadyExists = DB::table('users')
->where('id', '<>', auth()->id())
->where('email', $this->email)
->exists();
if (auth()->user()->isAdmin() && $alreadyExists) {
$validator->errors()->add('email', 'The email address is already taken');
}
});
}
}您需要在用户模型上实现一个isAdmin()方法,以验证用户是否是管理员。
//USer model
public function isAdmin()
{
//Determine if the user has the role of admin
return $this->hasRole('admin');
// or if there's a is_admin boolean column on users table
return $this->is_admin === true;
}https://stackoverflow.com/questions/72504801
复制相似问题