Symfony 3 | FOSUser Block registration if connected - symfony

I'm using FOSUser and I would like to return an exception or simply block access to registration if user is already connected. When I'm connected, by url, I can still go to /register.
This is my access_control :
access_control:
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
I could override registration controller action and return an AccessDeniedException but I'm sure there is a better solution, with security.yml maybe ?

if you add this:
- { path: ^/register, role: ROLE_ADMIN }
then use:
php bin/console fos:user:promote user_name ROLE_ADMIN
to add "user_name" to the ROLE_ADMIN, then other users will get an Access Denied message.

I finally found the answer. I have to use Voters to check user permissions.
This is doc : http://symfony.com/doc/current/cookbook/security/voters.html
And there is great example here : http://henrik.bjrnskov.dk/symfony2-anonymous-users-access/
And this is what I have :
- { path: ^/register, role: IS_ANONYMOUS }

Related

Symfony access_control Rule

I have 3 user roles
ROLE_STAFF
ROLE_ADMIN
ROLE_CUSTOMER
I want to implement following rule for my admin dashboard.
Allow user with role ROLE_ADMIN all access
Do not allow access to user with role ROLE_CUSTOMER to any url starting with /admin
Allow not logged in user to access url starting with /account
Allow user with role ROLE_STAFF to access url starting with /admin/business/*
For the above rule, I have implemented following rule in access_control
access_control:
- { path: ^/account, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/business, role: ROLE_STAFF }
- { path: ^/admin/dashboard, role: ROLE_STAFF }
- { path: ^/admin, role: ROLE_ADMIN }
This is not working as expected, the problem is, when I am logged in with ROLE_STAFF it works but when I login with ROLE_ADMIN it throws access denied error.
What could be possible issue here?
Thanks.

How to secure other controller using FOSUserbundle?

I'm trying to study the FOSUserBundle. I follow the steps of their documentation (link) and I successfully created a login form and registration. Now, I'm creating another controller name TodoController and I want to secure that TodoController. It needs the user to login first before they show the page of todo. How can I secure the TodoController?
FOSUserBundle only extend the Symfony security layer, but all other Symfony security stuff remains the same, so you can use the default access control from symfony security
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
You will find it mentioned in the link you provided, but you can read more about it here http://symfony.com/doc/current/security/access_control.html
Or if you want something more flexible and more powerful you can take a look at JMSSecurityExtraBundle http://jmsyst.com/bundles/JMSSecurityExtraBundle/1.2/annotations
Hope this helps,
Alexandru Cosoi

Set access control in Symfony2 for URL with querystring

I want to allow access to users with ROLE_ADMIN to the following path:
/admin
And only allow access to users with ROLE_CONTENT or ROLE_ADMIN to the following path:
/admin?select=pending
Here is my access control config in security.yml:
access_control:
- { path: ^/admin?select=pending, role: [ ROLE_ADMIN, ROLE_CONTENT ] }
- { path: ^/admin, role: ROLE_ADMIN }
However if I try to access to the query string path with a user with ROLE_CONTENT it gives me a 403 access denied error message.
Any suggestions on how to achieve this?

Symfony2 firewall, ROLE_USER has access to /admin

I have a problem with the firewall thing in Symfony2.
I have these in my security.yml file
- { path: ^/, role: ROLE_USER }
- { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/users, role: ROLE_ADMIN }
In my menu builder im using isGranted and this works perfect, if I login with my ROLE_USER user, the menu does not build the admin menu.
But if I manually type /admin in the browser I get the admin pages. (this happens both in production and dev envoirenment)
In the toolbar in dev env I can see the user dont have the ROLE_ADMIN role
If I dont login at all, I only see the login page, so here is everything fine
Full security.yml: https://gist.github.com/lsv/2e9dce622fd82d31853c
Full config.yml: https://gist.github.com/lsv/ec87592f911262af5417
Im using FOSUserbundle
Entries in access_control should be in the order from more specific to more general. So, in your case, they should be in the following order:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: ROLE_USER }

Sonata User Bundle - redirect loop

I have installed both FOSUserBundle and Sonata Admin bundle
First FOSUserBundle worked perfect, with both profile, login and logout.
Now with Sonata Admin bundle, I can CRUD my entities.
Now I wanted them integrated with login to my backend.
Now when I go to /admin/dashboard it redirects to /admin/login and then a infinity redirect loop.
I have properly messed up the security, and I really dont understand it that well.
security.yml : https://gist.github.com/lsv/4740268
routing.yml : https://gist.github.com/lsv/4740284
config.yml : https://gist.github.com/lsv/4740291
dev.log : https://gist.github.com/lsv/4740301
Can somebody help?
Add
- { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/login-check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
to security.yml

Resources