protected function updateResorces(&$db_resources_map, &$config_resources) { $db_resources = array_keys($db_resources_map); $config_resources = array_keys($config_resources); // delete group resources that are not in config $not_in_config_resources = array_diff($db_resources, $config_resources); if (count($not_in_config_resources)) { GroupResources::whereIn('resource', $not_in_config_resources)->delete(); } // delete role permissions then are not in config $deleted_permission_ids = array(); foreach ($not_in_config_resources as $deleted_resource) { $deleted_permission_ids[] = $db_resources_map[$deleted_resource]; } if (count($deleted_permission_ids)) { RolePermission::whereIn('permission_id', $deleted_permission_ids)->delete(); } // add the new resources $new_resources = array_diff($config_resources, $db_resources); \Eloquent::unguard(); foreach ($new_resources as $resource) { GroupResources::create(array('resource' => $resource)); } \Eloquent::reguard(); GroupResources::refreshGroupResources(); }
public static function updateRolePermissions(AclRole $role) { $group_resources = GroupResources::getGroupResources(); $perm_ids = []; /* @var $perm \Volicon\Acl\AclPermission */ foreach ($role->permissions as $key => $perm) { $permission_id = $group_resources->search($perm->resource); $perm_ids[] = $permission_id; $role->permissions[$key]->permission_id = $permission_id; if ($permission_id === FALSE) { throw new \Exception('Resource not exists: ' . $perm->resource); } } $db_role_perm = RolePermission::where('role_id', '=', $role->role_id)->get()->keyBy('permission_id'); $db_perm_ids = $db_role_perm->lists('permission_id'); $perm_to_delete = array_diff($db_perm_ids, $perm_ids); $perm_to_add = array_diff($perm_ids, $db_perm_ids); if ($perm_to_delete) { RolePermission::where('role_id', '=', $role->role_id)->whereIn('permission_id', $perm_to_delete)->delete(); } foreach ($role->permissions as $perm) { if (in_array($perm->permission_id, $perm_to_add)) { RolePermission::create(['role_id' => $role->role_id, 'permission_id' => $perm->permission_id, 'values' => json_encode($perm->values), 'allowed' => $perm->allowed]); } else { RolePermission::where('role_id', '=', $role->role_id)->where('permission_id', '=', $perm->permission_id)->update(['values' => json_encode($perm->values), 'allowed' => $perm->allowed]); } } }
public static function updateRole(AclRole $role) { DB::beginTransaction(); $dbRole = static::find($role->role_id); if (!$dbRole) { throw new Exception("Role not found: " . $role->role_id); } if ($dbRole->name !== $role->name && !$dbRole->default) { $dbRole->name = $role->name; $dbRole->save(); } RolePermission::updateRolePermissions($role); UserRole::updateRoleUsers($role); DB::commit(); return $role->role_id; }