0

I declared my roles with parameters.yml and I want to access them from my User entity for the getRoles function (from the UserInterface https://api.symfony.com/3.4/Symfony/Component/Security/Core/User/UserInterface.html#method_getRoles ).

role_global_admin: ROLE_GLOBAL_ADMIN
role_admin: ROLE_ADMIN
role_manager: ROLE_MANAGER

I wanted to access my parameters thanks to the service definition but I learned this is strictly forbidden in symfony (for the entities). Entities shouldn't have dependencies.

User.php

/**
 * Returns the roles granted to the user.
 *
 * @return (Role|string)[] The user roles
 */
public function getRoles()
{
    if (true === $this->isGlobalAdminRole()) {
        return ['ROLE_GLOBAL_ADMIN'];
    }

    return null == $this->getSymfonyOrganigramRole() ? ['ROLE_MANAGER'] : [$this->getSymfonyOrganigramRole()];
}

I want to access the role_global_admin parameter for example and not its value directly. getRoles() is executed automatically during the connexion to give the user a role.

How can I achieve that, I want my roles to be centralized in the parameters file.

Thanks

2
  • 1
    Typically you would of course define roles in security.yaml. Consider updating your question with a bit more info on how your parameters would be used. Commented Jun 8, 2018 at 13:55
  • I edited the question. Commented Jun 12, 2018 at 7:57

1 Answer 1

1

You can define your roles as constants in a separate file or in your entity and then use them in your entity, security.yml or any other yml file as mentioned here

For example:

AppBundle\Utils\UserMetaData

class UserMetaData {
    const ROLE_ADMIN = 'ROLE_ADMIN';
    const ROLE_USER  = 'ROLE_USER';
}

security.yml:

role_hierarchy:
    !php/const AppBundle\Utils\UserMetaData::ROLE_ADMIN: !php/const AppBundle\Utils\UserMetaData::ROLE_USER
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for the answer, it fixes my problem partially for the security.yml but how should I access these constants in my User.php entity ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.