我正在为自己的项目工作,并想知道是否有一个很好的解决方案来解决以下问题。
目前我正在创建用户>角色>许可制度。 我们的想法是,当您创建或更新角色时,您可以看到所有权限并使用复选框来添加te权限(非常简单)。 但我想为创建,读取,更新和删除(CRUD)添加更多复选框。
此时的设置如下:
角色表:
string name
权限表:
string name
PermissionRole表:
uint role_id, uint permission_id, boolean create, boolean read, boolean update, boolean delete
要为我使用sync()方法的角色添加权限。
示例:
$role->permissions()->sync([1 => ['create' => 1, 'update' => 1], 2 => ['create' => 1]]);
这很好用。但是,当我更新而不是插入时,例如我取消选中第一个权限创建的复选框时,创建不会被设置为false,因为表单不再发送创建复选框。
有没有办法使用同步方法,默认情况下让它将未添加的字段设置为false?
答案 0 :(得分:1)
您必须在调用sync之前构建属性数组,例如
$crudPermission1 = [
'create' => $request->has('permissions.1.create'),
'read' => $request->has('permissions.1.read'),
'update' => $request->has('permissions.1.update'),
'delete' => $request->has('permissions.1.delete')
];
$role->permissions()->sync([1 => $crudPermission1]);
这是一个简单的例子,您需要构建一个循环,以便为每个权限自动执行此操作。
你需要记住:
update
,则它将保持不变。$request->has('checkbox-name');