【问题标题】:Laravel different routes for different rolesLaravel针对不同角色的不同路线
【发布时间】:2016-10-11 22:09:01
【问题描述】:

我有一个 Laravel 应用程序,具有不同的角色管理员、买家和卖家。在路由文件中,我有前缀为 admin 和 users 的路由,当前缀为 user 时,我还会检查角色。买家与卖家拥有不同的权限。

Route::group(['prefix' => 'user'], function () {
    Route::group(['middleware' => ['auth', 'roles', 'user'], 'roles' => ['buyer']], function() {
        //
    });

    Route::group(['middleware' => ['auth', 'roles', 'user', 'owner:bids'], 'roles' => ['seller']], function() {
        //
    });

});

这给了我一些奇怪的副作用。例如,买方(用户 1)和卖方(用户 2)不能有两条相同的路线。我想拥有

http://localhost:8000/user/1/dashboard

但我需要这样做

http://localhost:8000/user/1/dashboard/buyer
http://localhost:8000/user/2/dashboard/seller

所以我开始认为我只需要区分管理员和用户(而不是像我上面所做的那样区分买卖双方),并检查控制器文件中的角色,而不是路径中的角色。

在用户可以拥有多个角色的情况下,与管理员和用户一起工作的更好方法是什么?

【问题讨论】:

    标签: laravel


    【解决方案1】:

    买家和卖家怎么走同一条路线,拥有相同的id? http://localhost:8000/user/1/dashboard

    那时只有一个用户可以执行不同的操作。


    我只想向用户门添加一个字段,例如 is_admin 并使用一些门来检查它。你的其他类似问题也是如此

    https://laravel.com/docs/5.1/authorization#via-the-gate-facade

    【讨论】:

    • 如果我不在路由中使用角色中间件,那么两者都是用户/仪表板。如果我使用角色(路径文件中显示的买方和卖方),那么我不能同时使用路径用户/仪表板。因此我必须称他们为 /user/dashboard/buyer 和 /user/dashboard/seller。
    • 这没有意义。您是否正在调用在路线上传递 {id} 的角色?您可以只使用一条路线并检查控制器上的所有内容
    • 您的意思是不为此使用中间件,而是检查控制器上的所有内容。我知道这是一种可能性,但我真的不明白为什么不使用中间件来检查角色。中间件的优点是我每次检查都在路由文件中。它工作得很好,除了这个小问题。但是我听到更多的人说使用中间件通常不是一个好的选择。只是我不相信,因为我真的不明白为什么不。
    • Gate 在不仅仅是管理员或用户时更容易管理权限。我只使用路由来检查是否是管理员。如果您想在这种情况下使用管理员中间和买方和卖方,这是可能的,但比我认为的门更复杂。所以可能你中间的代码还不正确。
    • 您还可以将门的检查分组到中间件中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2012-10-28
    • 2015-12-10
    • 2020-12-03
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多