Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9.7k
[SecurityBundle] added acl:set command#9990
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
A soft dependency could be better.
You can play withclass_exist andCommand::IsEnable method
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@lyrixxdoctrine-bundle is only needed to run the tests. It's arequire-dev dependency.
Making it a soft dependency is awkward because all functional tests on the ACL system will be skipped by default.
If someone clone the repository, start hacking, run phpunit and make a PR, he can silently broke the ACL system.
It will also require tweaking.travis.yml (to make Travis installdoctrine-bundle before running the tests) and update the doc to explain that tests should be run withdoctrine-bundle installed.
If it's really annoying to havedoctrine-bundle as a development dependency, I prefer registering the DBAL connection directly in the test app's kernel.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Let me know which solution is better.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Sorry. I did not see it was a dev deps ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
You're welcome.
ErichHartmann commentedJan 16, 2014
If any, could you please describe risks or security implications that might result from the ability to set the ACL directly from the command line? |
dunglas commentedJan 16, 2014
@ErichHartmann I think there is no specific security risk or implication for this command. If an attacker get a shell on your server, it's over. Even without this command. He can access to database's credentials through |
dunglas commentedFeb 11, 2014
Is this PR ready to be merged? Can I start working on the PR in the doc? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
The Help should be expanded to explain the main use cases (probably using the defined options).
fabpot commentedMar 3, 2014
@dunglas There is no need to document the command in the docs, but the help message should be expanded instead. |
stof commentedMar 4, 2014
the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This should beVALUE_NONE IMO
dunglas commentedMar 4, 2014
dunglas commentedMar 19, 2014
This PR was submitted for the 2.3-dev branch but it was merged into the 2.3 branch instead (closes#10497).Discussion----------[SecurityBundle] Fixed doc of InitAclCommand| Q | A| ------------- | ---| Bug fix? | no| New feature? | no| BC breaks? | no| Deprecations? | no| Tests pass? | yes| Fixed tickets | no| License | MIT| Doc PR | n/aUse {@inheritdoc}. Consistency with#9990 (diff).Commits-------aa49009 [SecurityBundle] Fixed doc of InitAclCommand
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
VALUE_OPTIONAL means that you don't need to pass a value when using this option, so--security-class is valid; which looks wrong to me. Again, any required value should probably be an argument and not an option.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This is not required to pass a security class. You must pass at least a security class and a security username OR a role.
This is checked lines 104 to 108.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
But when using the--security-class, you must pass a class name, right? If that's the case, you must useVALUE_REQUIRED.VALUE_OPTIONAL means that thevalue for the option is optional, not the option itself. An option isalways optional by definition.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Ok I got it. For required values, how to handle several arrays as arguments?
Object IDs and permissions are required and are arrays.
Should I use an argument for one of them (which) and leave the other as a (required) option?
dunglas commentedApr 9, 2014
Fixed options types. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
What if the user did not provide a--object-id option? You're going to getnull here. That's why I said thatall required informationmust be managed via arguments, not options. To avoid getting too many of them, you can maybe have some conventions likeclass:id.
dunglas commentedApr 21, 2014
@fabpot use arguments when required. Simplified and enhanced CLI. |
fabpot commentedApr 22, 2014
Looks good to me for 2.6. Thanks. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
weird variable name
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Indeed.
dunglas commentedApr 25, 2014
Renamed weird variable. |
fabpot commentedJun 3, 2014
Thank you@dunglas. |
This PR was merged into the 2.6-dev branch.Discussion----------[SecurityBundle] added acl:set command| Q | A| ------------- | ---| Bug fix? | no| New feature? | yes| BC breaks? | no| Deprecations? | no| Tests pass? | yes| Fixed tickets | no| License | MIT| Doc PR | n/aThis new command allows to set ACL directly from the command line. This useful to quickly set up an environment and for debugging / maintenance purpose.This PR also includes a functional test system for the ACL component. As an example, it is used to test the `acl:set` command.The provided entity class is not mandatory (tests will still be green without it) but can be useful to test other ACL related things. I can remove it if necessary.The instantiation of the `MaskBuilder` object is done in a separate method to be easily overridable to use a custom one (e.g. the SonataAdmin one).Commits-------a702124 [SecurityBundle] added acl:set command
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Hi@dunglas, I'm redacting a "New in Symfony 2.6" blog post about the newacl:set and I wonder if this help message is correct. If you are using the--class-scope, you are granting access to all the objects of the same class, so the trailing object id (42 in this case) should be removed, right?
Original help message:
<info>php %command.full_name% --class-scope --user=Symfony/Component/Security/Core/User/User:anne OWNER Acme/MyClass:42</info>
Proposed help message:
<info>php %command.full_name% --class-scope --user=Symfony/Component/Security/Core/User/User:anne OWNER Acme/MyClass</info>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Hi@javiereguiluz. This help message is correct. It should not be modified. This how the underlying ACL system works (and I agree that this is far from perfect).
The class scope can be set only is you precise an object identity (otherwise an error will be thrown). Technically, it will not grant access to all objects of the same class but only to all objects of this class present in the ACL table.
e.g:
- You have three objects:Untitled #1,Renaming "Entities" to "Entity" #2 andUntitled #3.
- ACL are initialized forUntitled #1 andUntitled #3 but not forRenaming "Entities" to "Entity" #2.
- You grant access to an user with the class scope.
- Access will be granted forUntitled #1 andUntitled #3 but not forRenaming "Entities" to "Entity" #2.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
@dunglas thanks for your reply. I now understand that everything is correct. However, I find this behavior amazingly counterintuitive. Moreover, in thescopes for access control entries section of the documentation it says:
Class-Scope: These entries apply to all objects with the same class.
This is quite different from what you have said.@wouterj don't you think that the documentation should better explain this strange behavior?
wouterj commentedJun 25, 2014
This also should get documented in |
This new command allows to set ACL directly from the command line. This useful to quickly set up an environment and for debugging / maintenance purpose.
This PR also includes a functional test system for the ACL component. As an example, it is used to test the
acl:setcommand.The provided entity class is not mandatory (tests will still be green without it) but can be useful to test other ACL related things. I can remove it if necessary.
The instantiation of the
MaskBuilderobject is done in a separate method to be easily overridable to use a custom one (e.g. the SonataAdmin one).