Главная » PHP » пытаюсь написать Политику включения комментариев в Laravel
пытаюсь написать Политику включения комментариев в Laravel
В laravel у меня есть таблица Подписчиков, которую я использую, чтобы проверить, следует ли Пользователь за другим Пользователем, а также может ли он комментировать сообщения.
и это проверки, которые я делаю, чтобы решить, может ли пользователь комментировать сообщение:
public function canComment(User $user, Post $post)
{
$following = Follower::where('follower_id', $user->id)->where('publisher_id', $post->user_id)->select('enable_follow')->get();
if (!$following->isEmpty()) {
$enabled = $following[0]['enable_follow'];
if ($enabled != '0') {
return true;
} else {
return false;
}
} else if ($following->isEmpty()) {
return true;
}
}
И это часть контроллера для хранения, как вы видите, я пытаюсь авторизоваться так: $this->authorize('canComment', $post[0]);
public function store(Request $request)
{//on_post, from_user, body
// define rules
$rules = array(
'post_id' => 'required',
'body' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
$post_id = $request->input('post_id');
$post = Post::findOrFail($post_id);
if ($validator->fails()) {
return Response()->json($validator);
} else {
$this->authorize('canComment', $post);
//prepares object to be stored in DB
$comment = new Comment();
$comment['user_id'] = $request->user()->id;
$comment['post_id'] = $post_id;
$comment['body'] = $request->input('body');
$comment->save();
if ($comment) {
$comment['user_name'] = $request->user()->username;
$comment['comment_id'] = $comment->id;
$comment['token'] = $request->input('_token');
}
return Response()->json($comment);}
}
Проблема в том, что я получаю 403 (Запрещено) ошибку в ситуации, когда у меня есть $following пусто и где следующее включено. Политика не работает, как ожидалось.
Исходный код метода авторизации на фасаде Gate:
public function authorize($ability, $arguments = [])
{
$result = $this->raw($ability, $arguments);
if ($result instanceof Response) {
return $result;
}
return $result ? $this->allow() : $this->deny();
}
Возможно, я не прав, возвращая истину или ложь в политике, так как этот код ожидает, что результат будет instance of Response но так что вы возвращаете, чтобы предоставить или запретить доступ ??
Проблема заключалась в размещении политики внутри commentPolicy, поэтому она ожидала получить комментарий, а не публикацию, а перемещение в postPolicy решило ее.
В laravel у меня есть таблица Подписчиков, которую я использую, чтобы проверить, следует ли Пользователь за другим Пользователем, а также может ли он комментировать сообщения.
Таблица выглядит так:
и это проверки, которые я делаю, чтобы решить, может ли пользователь комментировать сообщение:
И это часть контроллера для хранения, как вы видите, я пытаюсь авторизоваться так:
$this->authorize('canComment', $post[0]);
Проблема в том, что я получаю 403 (Запрещено) ошибку в ситуации, когда у меня есть
$following
пусто и где следующее включено. Политика не работает, как ожидалось.Исходный код метода авторизации на фасаде Gate:
Возможно, я не прав, возвращая истину или ложь в политике, так как этот код ожидает, что результат будет
instance of Response
но так что вы возвращаете, чтобы предоставить или запретить доступ ??Решение
Проблема заключалась в размещении политики внутри commentPolicy, поэтому она ожидала получить комментарий, а не публикацию, а перемещение в postPolicy решило ее.
Другие решения
Других решений пока нет …