Laravel模型广播私有频道授权、多守卫配置及客户端广播问题咨询
问题1:模型广播是否需要自行编写私有频道授权回调
你需要自行编写对应的私有频道授权回调,Laravel不会为模型广播自动生成默认的授权规则。
模型广播的作用是自动将模型的CRUD事件转换为广播事件、自动匹配对应格式的频道,但频道的订阅权限仍然需要开发者手动定义,你给出的示例写法是正确的,只有匹配授权规则的用户才能订阅对应模型的私有频道。
Broadcast::channel('App.User.{userId}', function ($user, $userId) { return $user->id === $userId; });
注:注意你示例代码里的userId前面漏掉了$符号,实际编写时需要补上
问题2:是否支持为不同auth guard编写独立的频道授权回调
完全支持,你给出的示例写法完全符合Laravel的规范。Broadcast::channel方法的第三个参数可以通过guards字段指定当前授权规则使用的用户认证守卫,回调函数的第一个参数会自动返回对应守卫登录的用户实例,不同守卫的授权规则互相独立,不会产生冲突。
Broadcast::channel('channel.{memberId}', function ($member, $memberId) { // 对应member guard的授权逻辑 }, ['guards' => ['member']]); Broadcast::channel('channel.{adminId}', function ($admin, $adminId) { // 对应admin guard的授权逻辑 }, ['guards' => ['admin']]);
问题3:Laravel广播是否支持客户端到客户端的直接广播
Laravel广播默认不开启客户端到客户端的直接广播能力,默认所有广播事件都必须由服务端触发,客户端仅能订阅频道接收消息,无法直接向频道推送消息给其他客户端,不会出现你担心的隐私风险。
只有当你主动在config/broadcasting.php中开启client_messages配置,同时在广播驱动侧开放客户端事件权限时,才会支持客户端直连广播,你只要保持默认配置关闭该能力即可。
内容的提问来源于stack exchange,提问作者Green Sung
相关产品推荐
相关产品推荐

