This is a bug. =Alena.
On 10/8/13 6:12 PM, "Min Chen" <min.c...@citrix.com> wrote: >Just simple listVMsCmd with page information, passing listAll=true or not >passing listAll returns the same set of data. > > >Thanks >-min > >On 10/8/13 5:55 PM, "Alena Prokharchyk" <alena.prokharc...@citrix.com> >wrote: > >>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, >>>> >>> >>> >> >> > >