守卫名称不一致怎么分配角色

:broken_heart: 扩展包laravel-permission
角色表:

id name guard_name
1 管理员 admin
2 用户 user

现在我 用登录的 auth(‘admin’) 守卫 来给某个 人员 添加个 用户角色 因为当前 guard_name 是不一致的, 他默认 在 admin 守卫 里找用户这个角色,然后是添加不了的,我有什么办法 我可以给人员 添加指点的 守卫 角色吗??

解决办法我想到的是有:

  • 不用扩展包的方法,直接操作数据库
  • 把系统的 守卫名称 guard_name 统一

ps: 可能自己设计有问题,很多东西没想到很好的解决方案,麻烦大家给点建议。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6

简化一下,其实就是三张表,查来查去,用户表,角色表,路由表,创建用户,创建角色,给用户分配角色,路由表上给角色分配权限,完事

2年前 评论

没看懂你这啥意思, 但是,看守器 guard 是管理用户认证的,不会什么角色

2年前 评论

我理解 guard 就是区分不同 session 的,通过 user guard 登录了的用户只能操作 user 认证后可访问的资源。admin guard 也是同理。举一个场景,你开发一个购物网站,用户直接访问 www.gouwu.com/my-order 这个地址,肯定需要用户登录查看自己的订单,这时候 laravel 其实默认了一个 guard 就是 web,你也在配置文件中可以把它修改成 user。这时候不管是哪个用户只要通过了 web 这个看守器的,都可以访问自己的订单了。现在又有一个需求了,我们还要为这个购物网站开发一个后台管理的功能。这时候有两个方案:1.再 new 一个新项目,然后独立的域名部署,假如就叫 admin.gouwu.com,这时候我们无需配置任何 guard,还是那个默认的 web 就行,因为跨域了都,www.gouwu.com 登录的那个用户肯定不会在 admin.gouwu.com 上生效。2.第二个方案就是还在 www.gouwu.com 这个项目上进行开发,我们假设地址是 www.gouwu.com/admin/xxx,凡是 admin 路径下的功能都属于后台管理的功能,这个时候遇到的问题就是我们不想让普通用户登录(laravel 里所谓的认证)后可以访问 admin 子路径下的功能,这个时候看守器的作用就体现了,我们可以配置 user 和 admin 两个看守器,就像现实中的不同看守一样,普通人想通过金库看守肯定不可能了。这里有个建议一旦配置了不同的看守器,所有操作最好都要带上他所属的看守器名称,不要为了省事省略那个默认的。现在我们说 laravel-permission 扩展,你的项目现在启用了不同的看守器,那么所有权限操作你都要明确的指定看守器了,如果不指定,那么这个操作就是默认的认证用户了,本来你是想给后台管理人员操作权限,没有明确指定看守器,那就是给普通用户操作的权限。啰嗦了这么多不知道回答了你的问题没有 :joy:

2年前 评论
大熊 (楼主) 2年前
luojigongren (作者) 2年前

可以参考我写的教程,应该可以帮助到你 博客:rbac 教程

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!