Попытка реализовать простую авторизацию доступа с помощью Lumen. Он работает при выполнении действия обновления (PUT). Но я также хотел бы обрабатывать доступ, например, ко всем статьям.
Я также пробовал метод политики viewAny
или view
, но безуспешно.
Router
$router->group(['prefix' => 'api/v1'], function () use ($router) {
$router->get('articles', ['uses' => 'ArticleController@showAllArticles']);
$router->get('articles/{id}', ['uses' => 'ArticleController@showOneArticle']);
$router->post('articles', ['uses' => 'ArticleController@create']);
$router->delete('articles/{id}', ['uses' => 'ArticleController@delete']);
$router->put('articles/{id}', ['uses' => 'ArticleController@update']);
});
AuthServiceProvider
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
Gate::policy('App\Article', 'App\Policies\ArticlePolicy');
$this->app['auth']->viaRequest('api', function ($request) {
return app('auth')->setRequest($request)->user();
});
}
}
Политики
namespace App\Policies;
use App\User;
use App\Article;
class ArticlePolicy
{
public function showAllArticles(User $user, Article $post)
{
// not working
return true;
}
public function update(User $user, Article $post)
{
// this works
return true;
}
}
Контроллер
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function __construct()
{
$this->middleware('auth:api');
}
public function showAllArticles()
{
$this->authorize('showAllArticles');
return response()->json(Article::all());
}
public function showOneArticle($id)
{
return response()->json(Article::find($id));
}
public function update($id, Request $request)
{
$article = Article::findOrFail($id);
$this->authorize('update', $article);
$article->update($request->all());
return response()->json($article, 200);
}
}