nordsoftware/lumen-rbac

View on GitHub
src/RbacService.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php namespace Nord\Lumen\Rbac;

use Crisu83\Overseer\Entity\Assignment;
use Crisu83\Overseer\Entity\Permission;
use Crisu83\Overseer\Entity\Resource;
use Crisu83\Overseer\Entity\Role;
use Crisu83\Overseer\Entity\Subject;
use Crisu83\Overseer\Overseer;
use Nord\Lumen\Rbac\Contracts\RbacService as RbacServiceContract;
use Nord\Lumen\Rbac\Contracts\SubjectProvider;

class RbacService implements RbacServiceContract
{

    /**
     * @var Overseer
     */
    private $overseer;

    /**
     * @var SubjectProvider
     */
    private $subjectProvider;


    /**
     * RbacService constructor.
     *
     * @param Overseer        $overseer
     * @param SubjectProvider $subjectProvider
     */
    public function __construct(Overseer $overseer, SubjectProvider $subjectProvider)
    {
        $this->overseer        = $overseer;
        $this->subjectProvider = $subjectProvider;
    }


    /**
     * @inheritdoc
     */
    public function configure(array $config)
    {
        $this->overseer->configure($config);
    }


    /**
     * @inheritdoc
     */
    public function getPermissions(Resource $resource = null, array $params = [])
    {
        $subject = $this->subjectProvider->getSubject();

        return $this->overseer->getPermissions($subject, $resource, $params);
    }


    /**
     * @inheritdoc
     */
    public function hasPermissions($permissionName, Resource $resource = null, array $params = [])
    {
        $subject = $this->subjectProvider->getSubject();

        return $this->overseer->hasPermission($permissionName, $subject, $resource, $params);
    }


    /**
     * @inheritdoc
     */
    public function subjectHasPermissions(
        $permissionName,
        Subject $subject,
        Resource $resource = null,
        array $params = []
    ) {
        return $this->overseer->hasPermission($permissionName, $subject, $resource, $params);
    }


    /**
     * @inheritdoc
     */
    public function saveRole(Role $role)
    {
        $this->overseer->saveRole($role);
    }


    /**
     * @inheritdoc
     */
    public function savePermission(Permission $permission)
    {
        $this->overseer->savePermission($permission);
    }


    /**
     * @inheritdoc
     */
    public function getRolesForSubject(Subject $subject)
    {
        return $this->overseer->getRolesForSubject($subject);
    }


    /**
     * @inheritdoc
     */
    public function createAssignment(Subject $subject, array $roles = [])
    {
        $assignment = new Assignment($subject->getSubjectId(), $subject->getSubjectName(), $roles);

        $this->overseer->saveAssignment($assignment);

        return $assignment;
    }


    /**
     * @inheritdoc
     */
    public function updateAssignment(Subject $subject, array $roles)
    {
        $assignment = $this->overseer->getAssignment($subject->getSubjectId(), $subject->getSubjectName());

        if ($assignment instanceof Assignment) {
            $assignment->changeRoles($roles);
        } else {
            $assignment = $this->createAssignment($subject, $roles);
        }

        return $assignment;
    }


    /**
     * @inheritdoc
     */
    public function getAssignment(Subject $subject)
    {
        return $this->overseer->getAssignmentForSubject($subject);
    }


    /**
     * @inheritdoc
     */
    public function deleteAssignment(Subject $subject)
    {
        $assignment = $this->overseer->getAssignment($subject->getSubjectId(), $subject->getSubjectName());

        if ($assignment instanceof Assignment) {
            $this->overseer->deleteAssignment($assignment);
        }
    }


    /**
     * @inheritdoc
     */
    public function setSubjectProvider($provider)
    {
        $this->subjectProvider = $provider;
    }
}