【问题标题】:how to get the roles and permissions dinamically - Laravel如何动态获取角色和权限 - Laravel
【发布时间】:2017-10-05 14:28:44
【问题描述】:

我正在尝试为我的 laravel API 实现角色和权限。我安装了包:

https://yajrabox.com/docs/laravel-acl/3.0/introduction

如果有人可以向我解释它是如何工作的,那就太好了,我要做的就是在用户点击一个 API 路由时获得许可。 我不想在每条路由中都设置中间件,因为我会做几条路由,每次设置中间件会很痛苦,我想动态地做。

我尝试自己做,但它不起作用。这是我在 Authserviceprovider 中的代码:

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

    Passport::routes();

    Passport::tokensExpireIn(Carbon::now()->addDays(15));

    Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));

    $permissions = Permission::with('roles')->get();

    foreach ($permissions as $permission)
    {
        $gate->define($permission->name, function (User $user) use ($permission) {
            return $user->hasPermission($permission);
        });
    }
}

我正在这样做:https://github.com/laracasts/laravel-5-roles-and-permissions-demo/tree/master/app

【问题讨论】:

  • "我不想在每条路由中都设置中间件,因为我会做多条路由,而且每次都会成为一个痛苦的中间件" - 你意识到你不必设置中间件每次都对吗?您可以在 web.php 文件中设置一次,中间件之间的任何内容都会被自动检查
  • 我不知道,我还在学习 Laravel
  • 我用来设置路由的文件名为 api.php
  • 我已经为您发布了有关如何使用中间件的答案。这应该非常适合您尝试做的事情。任何您不想被中间件检查的路由,只需将其放在 }); 下方即可;

标签: php laravel api


【解决方案1】:

您可以在 web.php / api.php 文件中使用中间件,例如下面的示例 (web.php):

Route::group(['middleware' => ['verified']], function () {
     Route::get('/', 'HomeController@index')->name('home');
});

正如我的示例所示,这将在允许帐户查看“/”之前检查帐户是否经过验证

更新

这几乎与上面的问题无关,但正如 Op 在 cmets 中对我的回答提出了第二个问题:这是我的中间件代码,用于向 Op 展示中间件将如何工作:

public function handle($request, Closure $next)
    {
        $verified = Auth::user();

        if ($verified->verified == 0)
        {
            Auth::logout();

            Session::flash('error', "$verified->username, your email address hasn't been verified yet therefore you're unable sign in.");

            return Redirect('/login');
        }
        return $next($request);
    }

【讨论】:

  • 这就是我想从 Laravel 文档中分享的内容,它应该可以完美运行 :) 向上
  • 我在所有项目中也使用它,因为我主要制作具有用户角色等的网站,因此它可以创造奇迹。
  • 我不再使用 Laravel(我很想念它),但我确信我已经在路由中看到了 group 选项。 Laravel 总是知道如何让我惊叹。
  • 哈哈是的,很好用。在今年终​​于深入研究 Laravel 之前,我是 PDO 的忠实用户。可以肯定地说这就是我现在使用的全部。
  • @Leandro,我已经用我给出的中间件示例编辑了答案,这样你就可以看到它是如何工作的
猜你喜欢
  • 1970-01-01
  • 2017-09-13
  • 2014-09-15
  • 2021-05-29
  • 2019-04-27
  • 2019-07-31
  • 1970-01-01
  • 2022-01-01
  • 2021-02-02
相关资源
最近更新 更多