Easy Menu ACL Bundle: Build menu showing items depending on the user

Recommend this page to a friend!
  Info   View files Documentation   View files View files (17)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog (1)    
Last Updated Ratings Unique User Downloads Download Rankings
2021-07-29 (1 month ago) RSS 2.0 feedNot yet rated by the usersTotal: 103 This week: 7All time: 9,472 This week: 31Up
Version License PHP version Categories
easymenuaclbundle 1.0.0The PHP License5HTML, PHP 5, User Management, Security
Description Author

This package can build a menu showing items depending on the user.

It provides a builder class that can route menu item creation to determine if the item should be displayed depending on the current user role.

Applications can provide a class to listen to menu building events so that the menu items can be added dynamically considering the user permissions.

Innovation Award
PHP Programming Innovation award nominee
July 2021
Number 5
Many Web applications can show menus to their users according to their permissions to access the application features.

This package provides solutions to automatically configure the application features that appear in menus that each user can see by integrating with classes that determine the application permissions that the users have.

Manuel Lemos
Picture of Roni
  Performance   Level  
Name: Roni <contact>
Classes: 9 packages by
Country: Bangladesh Bangladesh
Innovation award
Innovation award
Nominee: 3x

Details

Easy Menu Acl Bundle

A Symfony2 Bundle To Power up KnpMenuBundle. This bundle can be user to register menu with simple configuration. or can be used with zero configuration to filter menus as per security access level.

Note: If you are using Symfony version older then 2.6 you need to use EasyMenuAclBundle 1.x

Install

  1. Add EasyMenuAclBundle in your composer.json
  2. Enable the Bundle
  3. Configure config.yml(Optional)

1. Add EasyMenuAclBundle in your composer.json

Add EasyMenuAclBundle in your composer.json:

{
    "require": {
        "xiidea/easy-menu-acl-bundle": "2.0.*@dev"
    }
}

Now tell composer to download the bundle by running the command:

$ php composer.phar update xiidea/easy-menu-acl-bundle

Composer will install the bundle to your project's vendor/xiidea directory.

2. Enable the Bundle

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Xiidea\EasyMenuAclBundle\XiideaEasyMenuAclBundle(),
    );
}

3. Configure config.yml

# app/config/config.yml
xiidea_easy_menu_acl:
    # builders : [main, sidebar]

Cookbook

You can use this bundle 3(three) way.

1 Register menu with event listener.

First define builder configuration with as many menu as you need.

# app/config/config.yml
xiidea_easy_menu_acl:
    builders : [main, sidebar]

Then define event listener services to listen on xiidea.easy_menu_build_{THE_MENU_NAME}. For the example configuration there would be two events xiidea.easy_menu_build_main and xiidea.easy_menu_build_sidebar

# service.yml
    menu_build_listener:
        class: AppBundle\EventListener\MenuListener
        arguments: [@event_dispatcher]
        tags:
            - { name: kernel.event_listener, event: xiidea.easy_menu_build_main, method: buildMainMenu}
            - { name: kernel.event_listener, event: xiidea.easy_menu_build_sidebar, method: buildSideBarMenu}

Define the menuListener class

<?php
class MainMenuListener
{

    /
     * @var TraceableEventDispatcher
     */
    private $dispatcher;

    public function __construct(TraceableEventDispatcher $dispatcher){

        $this->dispatcher = $dispatcher;
    }

    /
     * @param EasyMenuEvent $event
     */
    public function buildMainMenu(EasyMenuEvent $event)
    {
        $menu = $event->getMenu();
        $factory = $event->getFactory();

        $menu->addChild('Home', array('uri' => '/'));
        $menu->addChild('Reports', array('route' => 'report_route'));

        //..

    }

    /
     * @param EasyMenuEvent $event
     */
    public function buildSideBarMenu(EasyMenuEvent $event)
    {
        $menu = $event->getMenu();
        $factory = $event->getFactory();

        $menu->addChild('Home Page', array('uri' => '/'));
        $menu->addChild('Reports', array('route' => 'report_route'));

        //..

    }
}

2. Zero configuration dispatching event:

You can use the bundle without configuration. You then need to dispatch an event xiidea.easy_menu_acl_post_build after you build your menu. Like :

<?php
//Menu builder

use Xiidea\EasyMenuAclBundle\Event\EasyMenuEvent;

class MenuBuilder extends ContainerAware
{
    public function mainMenu(FactoryInterface $factory, array $options)
    {
        $menu = $factory->createItem('root');

        $menu->addChild('Home', array('uri' => '/'));

        $menu->addChild('Reports', array('route' => 'report_route'));

        //.....

        $this->container->get('event_dispatcher')->dispatch(
            "xiidea.easy_menu_acl_post_build",
            new EasyMenuEvent($factory, $menu)
        );

        return $menu;
    }

3. Zero configuration using access filter service:

You can use the xiidea.easy_menu_acl.access_filter and apply filter on menu object.

<?php
//Menu builder

class MenuBuilder extends ContainerAware
{
    public function mainMenu(FactoryInterface $factory, array $options)
    {
        $menu = $factory->createItem('root');

        $menu->addChild('Home', array('uri' => '/'));

        $menu->addChild('Reports', array('route' => 'report_route'));

        //.....

        $this->container->get('xiidea.easy_menu_acl.access_filter')->apply($menu);

        return $menu;
    }

  Files folder image Files  
File Role Description
Files folder imageDependencyInjection (2 files, 1 directory)
Files folder imageEvent (1 file)
Files folder imageEventListener (1 file)
Files folder imageMenu (1 file)
Files folder imageResources (1 directory)
Files folder imageSecurity (2 files)
Accessible without login Plain text file .coveralls.yml Data Auxiliary data
Accessible without login Plain text file .scrutinizer.yml Data Auxiliary data
Accessible without login Plain text file .travis.yml Data Auxiliary data
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file LICENSE Lic. License text
Accessible without login Plain text file phpunit.xml.dist Data Auxiliary data
Accessible without login Plain text file README.md Doc. Read me
Plain text file XiideaEasyMenuAclBundle.php Class Class source

  Files folder image Files  /  DependencyInjection  
File Role Description
Files folder imageCompiler (1 file)
  Plain text file Configuration.php Class Class source
  Plain text file XiideaEasyMenuAclExtension.php Class Class source

  Files folder image Files  /  DependencyInjection  /  Compiler  
File Role Description
  Plain text file MenuPass.php Class Class source

  Files folder image Files  /  Event  
File Role Description
  Plain text file EasyMenuEvent.php Class Class source

  Files folder image Files  /  EventListener  
File Role Description
  Plain text file EasyMenuPostBuildListener.php Class Class source

  Files folder image Files  /  Menu  
File Role Description
  Plain text file Builder.php Class Class source

  Files folder image Files  /  Resources  
File Role Description
Files folder imageconfig (1 file)

  Files folder image Files  /  Resources  /  config  
File Role Description
  Accessible without login Plain text file services.yml Data Auxiliary data

  Files folder image Files  /  Security  
File Role Description
  Plain text file AccessFilter.php Class Class source
  Plain text file RouteAcl.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:103
This week:7
All time:9,472
This week:31Up
For more information send a message to info at phpclasses dot org.