GithubHelp home page GithubHelp logo

diimpp / rbacplugin Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sylius/rbacplugin

0.0 3.0 0.0 458 KB

Sylius roles and permissions management plugin

Gherkin 12.34% PHP 81.08% HTML 5.36% JavaScript 1.22%

rbacplugin's Introduction

Rbac Plugin

This plugin provides basic roles and permissions management functionality for Sylius application.

Beware!

Adding Write access to a permission automatically means adding Read access.

Write permission access means also updating and deleting.

Installation

  1. Require plugin with composer:

    composer require sylius/rbac-plugin
  2. Add plugin class and ProophServiceBusBundle to your bundles.php.

    return [
       // ...
       Prooph\Bundle\ServiceBus\ProophServiceBusBundle::class => ['all' => true],
       Sylius\RbacPlugin\SyliusRbacPlugin::class => ['all' => true],
    ];
  3. Override AdminUser entity:

a) Use AdministrationRoleAwareTrait and implement AdministrationRoleAwareInterface in the AdminUser class of your Sylius-Standard based project:

use Sylius\RbacPlugin\Entity\AdministrationRoleAwareInterface;
use Sylius\RbacPlugin\Entity\AdministrationRoleAwareTrait;

/**
 * @MappedSuperclass
 * @Table(name="sylius_admin_user")
 */
class AdminUser extends BaseAdminUser implements AdministrationRoleAwareInterface
{
    use AdministrationRoleAwareTrait;
}

b) And override the model's class in the chosen configuration file (e.g. config/_sylius.yaml):

sylius_user:
    resources:
        admin:
            user:
                classes:
                    model: App\Entity\AdminUser
  1. Import routing in routes/sylius_rbac.yaml:

    sylius_rbac:
        resource: "@SyliusRbacPlugin/Resources/config/routing.yml"
  2. Import configuration in config/sylius_rbac.yaml:

    imports:
        - { resource: "@SyliusRbacPlugin/Resources/config/config.yml" }
  3. Copy plugin migrations to your migrations directory (e.g. src/Migrations) and apply them to your database:

    cp -R vendor/sylius/rbac-plugin/migrations/* src/Migrations/
    bin/console doctrine:migrations:migrate
  4. Copy overwritten SyliusAdminBundle templates:

    mkdir templates/bundles/SyliusAdminBundle
    cp -R vendor/sylius/rbac-plugin/src/Resources/views/SyliusAdminBundle/* templates/bundles/SyliusAdminBundle/
  5. Run installation command

    bin/console sylius-rbac:install-plugin

    Which consists of:

    • sylius:fixtures:load

      Loading fixture with a default "No sections access" role.

      The command runs in non-interactive mode so it will NOT purge your database. However, once you run it again it will throw an exception because of duplicate entry constraint violation.

      If you want to install RBAC plugin again on the same environment you will have to remove all roles manually via administration panel or run all commands except sylius:fixtures:load separately.

    • sylius-rbac:normalize-administrators

      Assigns role created in a previous step to all already existent administrators.

    • sylius-rbac:grant-access <roleName> <adminSections>

      Where adminSections can be a space-separated list of any of these:

      • catalogManagement
      • configuration
      • customerManagement
      • marketingManagement
      • salesManagement

      Beware!

      There are two ways of defining root administrator's email address:

      • Provide it as a parameter in your configuration file (you will not be asked to enter it again via CLI during plugin's installation)
      parameters:
          root_administrator_email: [email protected]
      • Provide it via CLI

      e.g. bin/console sylius-rbac:grant-access administrator configuration catalogManagement

      In order to permit access to admin panel sections, please provide administrator's email address: [email protected]

      By default, installation command creates Configurator role with access granted to all sections.

Beware!

You can also use bin/console sylius-rbac:grant-access-to-given-administrator <email> <roleName> <adminSections> command in order to provide an email address as an input parameter.

Beware!

AdminUser entity references AdministrationRoleInterface, which is an abstraction layer above the default AdministrationRole implementation. You can easily customize it by adding a following snippet in your *.yaml configuration file:

doctrine:
    orm:
        resolve_target_entities:
            Sylius\RbacPlugin\Entity\AdministrationRoleInterface: FullyQualifiedClassName

Sections configuration

By default, RbacPlugin is provided with access configuration for basic Sylius sections (catalog, configuration, customers, marketing and sales) as well as for RBAC section, added by the plugin itself. Each section has a bunch of route prefixes associated with them, that describes which section gives permissions to which resources management.

However, usually, a Sylius application has a plenty of custom functions within existing or entirely new sections. This plugin allows you to extend its configuration, in order to restrict access to these custom routes.

For the matter of example let's assume we have a simple Supplier resource (containing only string $name property). It also has already generated routes, that we would like to restrict access to:

  • app_admin_supplier_index
  • app_admin_supplier_create
  • app_admin_supplier_update
  • app_admin_supplier_bulk_delete
  • app_admin_supplier_delete

If you don't know how to create and configure custom resource in Sylius application, check out relevant documentation chapter.

Extending basic Sylius section with new route prefixes

The only thing required to restrict Supplier-related routes with, for example, "Customer management" permission, is adding appropriate route prefix to customers section configuration:

sylius_rbac:
    sylius_sections:
        customers:
            - app_admin_supplier

You would probably also want to add extend "Customers" section in Admin main menu (take a look at this docs chapter for more information).

Customers sections customized

As a result, each Administrator allowed to manage customers in the Admin panel would also be able to manage Suppliers. You may also notice, nothing has changed in permissions configuration form, as no new section has been added to the RBAC configuration.

Permissions configuration - no changes

Adding a custom section to the application

What if you want to differentiate your new resources management permission? The other possibility is to define your own, custom section in a plugin configuration:

sylius_rbac:
    custom_sections:
        suppliers:
            - app_admin_supplier

Curiosity: RBAC is also defined as a custom section! You can easily check it out in a plugin source code.

With such a configuration, you should notice a new permission configuration available in the Administration Role form.

Permissions configuration - no changes

To display new permission name nicely, you should also configure a translation in your application's translation file:

sylius_rbac:
    ui:
        permission:
            suppliers: Suppliers

Remember!

When configuring a custom section in Admin main menu, name it the same way you named it under custom_sections key in the plugin configuration. It will be automatically hidden and shown, exactly as basic Sylius sections!

$suppliersSubmenu = $menu->addChild('suppliers')->setLabel('Suppliers');

$suppliersSubmenu
    ->addChild('supplier', ['route' => 'app_admin_supplier_index'])
    ->setLabel('Manage Suppliers')
    ->setLabelAttribute('icon', 'address card outline')
;

Suppliers section

After these few simple steps, you can already give your custom permission to any already existent Administration role.

Security issues

If you think that you have found a security issue, please do not use the issue tracker and do not post it publicly. Instead, all security issues must be sent to [email protected].

rbacplugin's People

Contributors

bartoszpietrzak1994 avatar gsadee avatar hmonglee avatar lchrusciel avatar mamazu avatar pamil avatar peterukena avatar roshyo avatar zales0123 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.