Laravel 5.8集成Aimeos:如何通过代码将新建用户加入用户组?
如何在Laravel 5.8 + Aimeos 2019.04中给新创建的用户添加到editor用户组?
嘿,针对你这个场景,我分两种情况给你捋清楚,毕竟要看你说的editor是Laravel自带的用户组还是Aimeos的客户权限组:
情况1:添加到Aimeos的editor客户权限组(更可能是你的需求)
因为你用了Aimeos扩展,后台的编辑权限一般是通过Aimeos的客户组来控制的,操作步骤如下:
- 先获取Aimeos的上下文对象:这是Aimeos所有操作的基础,在你的命令类里可以直接通过Laravel容器获取
- 找到
editor对应的客户组:通过Aimeos的组管理器搜索到编码为editor的组 - 关联用户对应的Aimeos客户到该组:你创建的User模型里有
id_customer字段(对应Aimeos的客户ID),先拿到Aimeos的客户对象,再把它添加到组里
具体代码可以这么写:
// 引入必要的类(如果命令类里没引入的话) use Aimeos\Shop\Base\Context; // 在你创建并保存User的代码之后 $user->save(); // 1. 获取Aimeos上下文 $context = app(Context::class)->get(false); // false表示前端上下文,给后台用户加组的话用true // 2. 获取客户组管理器并找到editor组 $groupManager = \Aimeos\MShop::create($context, 'customer/group'); $searchFilter = $groupManager->filter(); $searchFilter->setConditions($searchFilter->compare('==', 'customer.group.code', 'editor')); $groups = $groupManager->search($searchFilter); if( ($editorGroup = reset($groups)) === false ) { // 如果editor组不存在,这里可以抛出异常或者先创建组 throw new \RuntimeException('Editor权限组未找到,请先在Aimeos后台创建该组'); } // 3. 获取用户对应的Aimeos客户对象并关联组 $customerManager = \Aimeos\MShop::create($context, 'customer'); $aimeosCustomer = $customerManager->get($user->id_customer); // 添加客户到editor组 $aimeosCustomer->addGroupItem($editorGroup); $customerManager->save($aimeosCustomer);
情况2:添加到Laravel自带的editor用户组
如果你说的editor是Laravel自身的用户组(比如用了Laravel自带的多用户组功能,或者第三方权限包如spatie/laravel-permission),操作就简单多了:
如果你用的是spatie/laravel-permission包:
// 保存用户后直接分配角色 $user->assignRole('editor');
如果你用的是Laravel原生的用户组关联(比如有groups表,User模型和Group模型是多对多关联):
// 先找到editor组 $editorGroup = \App\Group::where('name', 'editor')->firstOrFail(); // 关联用户和组 $user->groups()->attach($editorGroup);
内容的提问来源于stack exchange,提问作者Mikael
相关产品推荐
相关产品推荐

