/** * Handle the fields. * * @param PermissionFormBuilder $builder * @param AddonCollection $addons * @param Translator $translator * @param Repository $config */ public function handle(PermissionFormBuilder $builder, AddonCollection $addons, Translator $translator, Repository $config) { /* @var UserInterface $user */ $user = $builder->getEntry(); $fields = []; $namespaces = ['streams']; /* @var Addon $addon */ foreach ($addons->withConfig('permissions') as $addon) { $namespaces[] = $addon->getNamespace(); } foreach ($namespaces as $namespace) { foreach ($config->get($namespace . '::permissions', []) as $group => $permissions) { $label = $namespace . '::permission.' . $group . '.name'; if (!$translator->has($warning = $namespace . '::permission.' . $group . '.warning')) { $warning = null; } if (!$translator->has($instructions = $namespace . '::permission.' . $group . '.instructions')) { $instructions = null; } $fields[$namespace . '::' . $group] = ['label' => $label, 'warning' => $warning, 'instructions' => $instructions, 'type' => 'anomaly.field_type.checkboxes', 'value' => function () use($user, $namespace, $group) { return array_map(function ($permission) use($user, $namespace, $group) { return str_replace($namespace . '::' . $group . '.', '', $permission); }, $user->getPermissions()); }, 'config' => ['options' => function () use($group, $permissions, $namespace) { return array_combine($permissions, array_map(function ($permission) use($namespace, $group) { return $namespace . '::permission.' . $group . '.option.' . $permission; }, $permissions)); }]]; } } $builder->setFields($fields); }
/** * Handle the form. * * @param PermissionFormBuilder $builder * @param UserRepositoryInterface $users * @param Redirector $redirect */ public function handle(PermissionFormBuilder $builder, UserRepositoryInterface $users, Redirector $redirect) { /* @var UserInterface|EloquentModel $user */ $user = $builder->getEntry(); $users->save($user->setAttribute('permissions', array_filter(array_flatten($builder->getFormInput())))); $builder->setFormResponse($redirect->refresh()); }
/** * Handle the form. * * @param PermissionFormBuilder $builder * @param UserRepositoryInterface $users * @param Redirector $redirect */ public function handle(PermissionFormBuilder $builder, UserRepositoryInterface $users, Redirector $redirect) { /* @var UserInterface $user */ $user = $builder->getEntry(); $users->save($user->setPermissions(array_keys(array_dot(array_map(function ($values) { return array_combine(array_values($values), array_pad([], count($values), true)); }, array_filter($builder->getFormInput())))))); $builder->setFormResponse($redirect->refresh()); }
/** * Handle the fields. * * @param PermissionFormBuilder $builder * @param AddonCollection $addons * @param Translator $translator * @param Repository $config */ public function handle(PermissionFormBuilder $builder, AddonCollection $addons, Repository $config) { $sections = []; $sections['streams']['title'] = 'streams::message.system'; foreach ($config->get('streams::permissions', []) as $group => $permissions) { $sections['streams']['fields'][] = 'streams::' . $group; } /* @var Addon $addon */ foreach ($addons->withConfig('permissions') as $addon) { $sections[$addon->getNamespace()]['title'] = $addon->getName(); $sections[$addon->getNamespace()]['description'] = $addon->getDescription(); foreach ($config->get($addon->getNamespace('permissions'), []) as $group => $permissions) { $sections[$addon->getNamespace()]['fields'][] = $addon->getNamespace($group); } } $builder->setSections($sections); }
/** * Handle the fields. * * @param PermissionFormBuilder $builder * @param AddonCollection $addons * @param Translator $translator * @param Repository $config */ public function handle(PermissionFormBuilder $builder, AddonCollection $addons, Translator $translator, Repository $config) { /* @var UserInterface $user */ $user = $builder->getEntry(); $roles = $user->getRoles(); $inherited = $roles->permissions(); $fields = []; $namespaces = array_merge(['streams'], $addons->withConfig('permissions')->namespaces()); /** * gather all the addons with a * permissions configuration file. * * @var Addon $addon */ foreach ($namespaces as $namespace) { foreach ($config->get($namespace . '::permissions', []) as $group => $permissions) { /** * Determine the general * form UI components. */ $label = $namespace . '::permission.' . $group . '.name'; if (!$translator->has($warning = $namespace . '::permission.' . $group . '.warning')) { $warning = null; } if (!$translator->has($instructions = $namespace . '::permission.' . $group . '.instructions')) { $instructions = null; } /** * Gather the available * permissions for the group. */ $available = array_combine(array_map(function ($permission) use($namespace, $group) { return $namespace . '::' . $group . '.' . $permission; }, $permissions), array_map(function ($permission) use($namespace, $group) { return $namespace . '::permission.' . $group . '.option.' . $permission; }, $permissions)); /** * Build the checkboxes field * type to handle the UI. */ $fields[$namespace . '::' . $group] = ['label' => $label, 'warning' => $warning, 'instructions' => $instructions, 'type' => 'anomaly.field_type.checkboxes', 'value' => array_merge($user->getPermissions(), $inherited), 'config' => ['disabled' => $inherited, 'options' => $available]]; } } $builder->setFields($fields); }
/** * Return the form for editing permissions. * * @param PermissionFormBuilder $form * @param $id * @return \Symfony\Component\HttpFoundation\Response */ public function permissions(PermissionFormBuilder $form, $id) { return $form->render($id); }