[SecurityBundle] added acl:set command#9990
Conversation
There was a problem hiding this comment.
A soft dependency could be better.
You can play with class_exist and Command::IsEnable method
There was a problem hiding this comment.
@lyrixx doctrine-bundle is only needed to run the tests. It's a require-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 install doctrine-bundle before running the tests) and update the doc to explain that tests should be run with doctrine-bundle installed.
If it's really annoying to have doctrine-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.
Let me know which solution is better.
There was a problem hiding this comment.
Sorry. I did not see it was a dev deps ;)
|
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? |
|
@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 |
|
Is this PR ready to be merged? Can I start working on the PR in the doc? |
There was a problem hiding this comment.
The Help should be expanded to explain the main use cases (probably using the defined options).
|
@dunglas There is no need to document the command in the docs, but the help message should be expanded instead. |
|
the |
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/a Use {@inheritdoc}. Consistency with #9990 (diff). Commits ------- aa49009 [SecurityBundle] Fixed doc of InitAclCommand
There was a problem hiding this comment.
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.
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.
But when using the --security-class, you must pass a class name, right? If that's the case, you must use VALUE_REQUIRED. VALUE_OPTIONAL means that the value for the option is optional, not the option itself. An option is always optional by definition.
There was a problem hiding this comment.
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?
|
Fixed options types. |
There was a problem hiding this comment.
What if the user did not provide a --object-id option? You're going to get null here. That's why I said that all required information must be managed via arguments, not options. To avoid getting too many of them, you can maybe have some conventions like class:id.
|
@fabpot use arguments when required. Simplified and enhanced CLI. |
|
Looks good to me for 2.6. Thanks. |
|
Renamed weird variable. |
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).