Метод check
Метод check класса Gate применяется для проверки прав доступа пользователя.
Он принимает первым параметром имя действия, которое нужно проверить,
а вторым - необязательный аргумент с данными для проверки (например, модель).
Метод возвращает true, если пользователь имеет право на действие,
и false в противном случае.
Синтаксис
<?php
use Illuminate\Support\Facades\Gate;
Gate::check($action, $arguments);
?>
Пример
Давайте проверим, может ли текущий пользователь редактировать статью:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Gate;
use App\Models\Article;
class ArticleController extends Controller
{
public function update($id)
{
$article = Article::findOrFail($id);
if (Gate::check('update-article', $article)) {
echo "User can update article";
} else {
echo "User cannot update article";
}
}
}
?>
Результат выполнения кода:
"User can update article"
Пример
Давайте проверим несколько прав пользователя с помощью метода any:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Gate;
use App\Models\Article;
class UserController extends Controller
{
public function dashboard()
{
$article = Article::findOrFail(1);
$res = Gate::any(['update-article', 'delete-article'], $article);
if ($res) {
echo "User can update or delete article";
} else {
echo "User cannot update or delete article";
}
}
}
?>
Результат выполнения кода:
"User can update or delete article"
Пример
Проверим, запрещено ли пользователю действие с помощью метода denies:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Gate;
use App\Models\Post;
class PostController extends Controller
{
public function delete($id)
{
$post = Post::findOrFail($id);
if (Gate::denies('delete-post', $post)) {
echo "User cannot delete post";
} else {
echo "User can delete post";
}
}
}
?>
Результат выполнения кода:
"User cannot delete post"