当前位置: 首页 > 知识库问答 >
问题:

在api资源方法上有条件地应用Passport作用域

利俊迈
2023-03-14

我正在使用passport个人访问令牌保护我的API。下面是一些代码片段。

// api.php
Route::apiResource('categories', 'CategoryController');

AuthServiceProvider.php

public function boot()
    {
        $this->registerPolicies();

        //scopes 
        Passport::tokensCan([
            'admin' => 'Perform every action',
            'user' => 'Perform only normal user actions',
        ]);

        // passport routes
        Passport::routes();
        //
    }

类别控制器。php

class CategoryController extends Controller
{
    function __construct()
    {
        $this->middleware('api:auth', ['scopes: admin']);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {   
        return CategoryResource::collection(Category::all()); 
    }
    ...

正如你所看到的,我已经使用了只有管理员用户才能访问的管理员范围。但问题是类别模型只能由管理员范围编辑或更新,管理员和用户范围都可以访问。解决这一问题的最佳方法是什么?

共有1个答案

鲁德佑
2023-03-14

一个对我有效的解决方案是,我在不同的范围内使用了两次中间件。

class CategoryController extends Controller
{
    function __construct()
    {
        $this->middleware('api:auth', ['scopes: admin'])->except(['index']);
        $this->middleware('api:auth', ['scopes: user'])->only(['index']);
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {   
        return CategoryResource::collection(Category::all()); 
    }
    ...
 类似资料:
  • 我想有条件地显示和隐藏这个按钮组,这取决于从父组件传递的内容,看起来像这样: .... .... 然而,{this.props.showBulkActions'show':'hidden'并没有发生任何事情。我做错什么了吗?

  • 我们公司的一些团队目前正在“升级”一些遗留项目以使用Flyway。一个问题是存在多个具有已可用数据库对象(基线)的安装。 我们目前有一个用例(将来肯定会有更多),我们必须创建一些新的迁移脚本,但它们只能在满足数据库当前状态的特定条件时运行。 例如:运行此脚本,但仅当数据库中的表 X 包含数据 Y 时 我已经看到了Flyway条件数据库迁移,但对我来说,这似乎不是正确的解决方案,因为条件不仅仅是一些

  • 问题内容: 我需要能够根据作用域上的布尔变量向元素添加例如“ contenteditable”。 使用示例: 如果设置为,将导致contenteditable = true被添加到元素。有一些简单的方法可以实现这种ng- class这样的属性行为吗?我正在考虑编写指令,如果没有,请共享。 编辑: 我可以看到我提议的attrs指令和ng-bind- attrs 之间似乎有些相似之处,但是在1.0.0

  • 我有如下代码: 在我的属性文件中,我有: 这不起作用,parseFooBar在第一秒每分钟都被执行。 但是,如果我添加字段: 所以我可以做一个日志,看看它是什么,parseFooBar不会被执行。移除注入的字符串会再次看到parseFooBar执行。我做错了什么? 编辑:这是使用Spring 4.1.5,Spring Boot 1.2.1和JDK 8 编辑2:将注释移动到类型也有效。(无需强制使用

  • 我试图在构建时使用maven资源插件复制xml文件,但到目前为止没有成功。 Maven目标-干净安装 它需要任何特殊的maven目标来复制东西吗?请帮帮我。 插件版本 提到这个

  • 我们公司刚刚建立了一个声纳农场。我对我们的代码质量很好奇,想改进。 我有一个代码包含这样的记录器调用: Sonar触发规则squid:S262,仅有条件地调用方法“前提条件”和日志参数不应要求求值。由这两行触发的规则。 关于这件事,我不太清楚到底发生了什么。这个解释不太适合我的用例。Sonar doc提供了以下示例: 我完全理解(调试不会记录在生产中,因此会发生不必要的操作)。但对于信息和错误级别