On 10/8/13 5:48 PM, "Min Chen" <min.c...@citrix.com> wrote:
>Thanks Alena for the clarification. > >If you try ListVMsCmd as a domain admin, if I pass listAll=false, what >should be the expected behavior? The same as if you don't pass anything. The domain admin will see his own resources (the ones that belong to his account) >Should he be able to see VMs under his domain but not owned by him? The >current CloudStack behavior will >show all VMs under his domain. This seems contradictory to the meaning of >listAll. Do you pass anything else to the call besides listAll=false? Is the result the same when you don't pass listAll=false to the call? If so, what other parameters do you pass in > >Thanks >-min > > > >>On 10/8/13 4:28 PM, "Min Chen" <min.c...@citrix.com> wrote: >> >>>Hi there, >>> >>>In working with RBAC design, I am really puzzled by the two query >>>parameter "listAll" and "recursive" for all BaseListDomainResourceCmd. >>> >>> >>> @Parameter(name = ApiConstants.LIST_ALL, type = CommandType.BOOLEAN, >>>description = "If set to false, " + >>> >>> "list only resources belonging to the command's caller; if >>>set to true - list resources that the caller is authorized to see. >>>Default value is false") >>> >>> private Boolean listAll; >>> >>> >>> @Parameter(name = ApiConstants.IS_RECURSIVE, type = >>>CommandType.BOOLEAN, description = "defaults to false," + >>> >>> " but if true, lists all resources from the parent specified >>>by the domainId till leaves.") >>> >>> private Boolean recursive; >>> >>> >>>IMHO, if a caller invokes a list API without passing any specific query >>>parameter, he/she should see all resources that he/she is authorized to >>>see. In CloudStack, we have implicit authorization rules as follows: >>>1. Root admin should be able to see all the resources under Root domain. >>>2. Domain admin should be able to see all the resources under its own >>>domain tree. >>>3. Normal user should only see the resources owned by him. >> >>listAll doesn't impact user calls. >> >>>4. Project account should be able to see resources assigned to that >>>project. >> >>Project account can't make the calls. Any CS account assigned to the >>project + admin can list project resources. When listAll is passed in, >>all >>resources except project resources, will be returned to the caller. When >>projectId=-1 is passed in, all resources of all projects in the system >>that caller is authorized to see, will be returned to the caller. >> >>>Based on current AccountManager.buildACLSearchParameters implementation, >>>we are not observing the passed "listAll" and "recursive" value at all, >>>seems always treating "listAll=true" and "recursive=true". >> >>recursive=false is respected when passed along with the domainId. In this >>case, it will list all the resources under this domain only, without >>subdomains. When recursive=true is passed with domainId, the resources of >>domains + subdomains will be returned. >> >>>Thus, I am proposing that we change the default value of "listAll" and >>>"recursive" to TRUE instead of current FALSE. Any objections? >> >> >>The main objection - it will break all the partners/third party apps/UIs >>built on the current CS behavior. >> >>> >>>Thanks >>>-min >>> >> >>Min, >> > >