[已解决] 请问我可以在路由里面限定某个用户才能访问某些路由, 而其他用户无法访问么?

问答 Larwas ⋅ 于 3周前 ⋅ 最后回复由 DavidNineRoc 1周前 ⋅ 304 阅读

如题, 想这样直接做个简单的权限管理.请问有这样的方法么

补充:
我的users表 里面 state 字段值:1启用, 2禁用, 3管理员, 4商家. 我根据这个用4楼方法做简单的一个路由访问权限.

回复数量: 7
  • DavidNineRoc 当神不再是我们的信仰,那么信仰自己吧,努力让自己变好不辜负自己的信仰...
    3周前
    // permission 权限表, 记得创建路由需要别名,推荐使用资源路由
    id
    user_id
    route

    加一个中间件在全局里

         // 先获取当前路由名字
            $route = Route::currentRouteName();
            // 判断权限表中这条路由是否需要验证
            if ($permission = Permission::where('route', $route)->exists()) {
                // 当前用户不拥有这个权限的名字
                if (! auth()->user()->permission()->where('route', $route)->exists()) {
                        return  return response()->view('hint.error', [
                        'status' => "权限不足,需要:{$route}权限",
                      ]);
                }
            }
        return $next($request);

    大概就是这样子了。

  • 走道带电
    2周前

    整体思路基本就是楼上所诉,如果使用laravel,推荐使用一个扩展enturst
    https://github.com/Zizaco/entrust

  • mingyun
    2周前

    @DavidNineRoc 赞方法

  • Larwas
    1周前

    @DavidNineRoc 感谢, 受教了, 不过看了您提供的方法后, 我也想到了一个更简单的, 直接用的用户的 state 字段做权限.

    1.在用户模型 User.php 创建if_admin方法.

    file

    2.创建 isAdmin.php 中间件

    file

    3.路由使用中间件做简单权限

    file

    这样目的也就达成, 不过这也有个不好的地方, 当一个路由需要同时被 state=3和4的同时访问, 又不被state=1和2 访问的时候我目前就是将路由复制到2个group里面;
    因为这只是内部使用的系统, 所以也没在深入研究了.

    file

    file

    初学laravel, 若有什么错误, 还望赐教!谢谢~

  • 王举
    1周前

    我是看到菜户才进来的 :cactus:

  • Larwas
    1周前

    @王举 不说我还没发现打错字了! 尴尬

  • DavidNineRoc 当神不再是我们的信仰,那么信仰自己吧,努力让自己变好不辜负自己的信仰...
    1周前

    @Larwas 单一权限是这样做的,没问题的

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter