polyfony-inc/polyfony

View on GitHub
Private/Polyfony/Profiler/HTML/Security.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php

namespace Polyfony\Profiler\HTML;
use Bootstrap\Dropdown as Dropdown;
use Polyfony\Element as Element;

class Security {

    public static function getBody(
        Dropdown $security_dropdown
    ) : Dropdown {

        $account = \Polyfony\Security::getAccount();

        $login = new Element('code', [
            'text'=>$account ? $account->get('login', true) : 'n/a'
        ]);
        $security_dropdown->addItem([
            'html'=>"<strong>Login</strong> {$login}"
        ]);

        $id = new Element('code', [
            'text'=>$account ? $account->get('id', true) : 'n/a'
        ]);

        $security_dropdown->addItem([
            'html'=>"<strong>ID</strong> {$id}"
        ]);

        $security_dropdown->addDivider();
        $security_dropdown->addHeader(['text'=>'Roles']);

        if($account) {
        
            foreach(
                $account->getRoles() as 
                $role
            ) {
                $security_dropdown->addItem([
                    'html'=>$role->getBadge()
                ]);
            }

        }

        $security_dropdown->addDivider();
        $security_dropdown->addHeader(['text'=>'Permissions']);

        if($account) {
            foreach(
                $account->getPermissions(true) as 
                $permission
            ) {
                
                // only include permissions not inherited from a role
                if(!$permission->get('id_role')) { 
                    // add that permission
                    $security_dropdown->addItem([
                        'html'=>$permission->getBadge()
                    ]);

                }

            }
        }

        

        return $security_dropdown;

    }

    public static function getComponent() : Dropdown {

        $account = \Polyfony\Security::isAuthenticated() ? 
            \Polyfony\Security::getAccount() : null;

        // SECURITY
        $security_dropdown = (new Dropdown)
            ->setTrigger([
                'text'    =>' ' . ($account ? $account->get('login') : 'n/a'),
                'class'    =>'btn btn-security' . (\Polyfony\Config::get('profiler','use_small_buttons') ? ' btn-sm' : ''),
                'style'    =>'margin-left:10px'
            ], 'fa fa-user-circle');
        

        $security_dropdown = self::getBody($security_dropdown);

        // restore: last login date
        // restore: session expiration date

        return $security_dropdown;

    }

}

?>