On Thu, Mar 22, 2012 at 4:45 PM, Sergiu Dumitriu <[email protected]> wrote: > On 03/22/2012 09:56 AM, Jean-Vincent Drean wrote: >> >> On Wed, Mar 21, 2012 at 9:07 PM, Sergiu Dumitriu<[email protected]> wrote: >>> >>> On 02/13/2012 11:27 AM, Vincent Massol wrote: >>>> >>>> >>>> Hi devs, >>>> >>>> I've been brainstorming with Jean-Vincent about how to implement hiding >>>> technical content for 4.0. Here's what we would like to do: >>>> Note: This is related to the proposal I made earlier: >>>> http://markmail.org/thread/jupn22fdk4nnqj6p >>>> >>>> In summary: >>>> >>>> * Add a RoleVisibilityClass XObject to documents and spaces (in >>>> WebPreferences for Spaces) which is a list of Roles (simple or advanced >>>> users for now) deciding which role should be allowed to view a given >>>> document in result sets. >>> >>> >>> >>> Should we use different objects for different levels of rights? For >>> example, >>> we have XWikiRights and XWikiGlobalRights to distinguish between rights >>> on >>> the WebPreferences document itself and rights on the whole space. If we >>> always assume that a RoleVisibilityClass object on a WebPreferences >>> document >>> always refers to the space visibility, then we will have to rely on the >>> blacklist to hide all WebPreferences documents. Is that something we want >>> to >>> hardcode? >>> >>> An alternative that doesn't require using two classes is to add a "scope" >>> property to the class, to distinguish between document, space and wiki >>> settings. >>> >> >> I still think that we could finish what you've started with >> XWikiDocument#isHidden() by: >> >> - moving it to the query manager >> - making it easy to disable the filtering, with a per-call or per-user >> setting >> - allowing to mark a document as hidden from the UI (the checkbox >> would only be displayed to users who decided to display hidden >> documents) >> - get the list of spaces with : >> >> -------------------------------------------------------8<----------------------------------------------------- >> select distinct doc.space from XWikiDocument doc where (doc.hidden<> >> true or doc.hidden is null) order by doc.space asc >> >> -------------------------------------------------------8<----------------------------------------------------- >> - mark all the technical documents in our distribs as hidden >> >> For example It would allow to display the XWiki space in the list of >> spaces but (by default) the list of pages within this space would be >> the list of user documents. The scheduler space wouldn't appear >> because it only contains technical documents. >> >>> >>>> * Either modify XWikiHibernateStore or introduce a new >>>> FilteredHibernateStore store which would delegate to XWikiHibernateStore >>>> (same mechanism as the cache store) to add the JOIN to check the >>>> visibility >>>> and only return visible documents for the current user >>> >>> >>> >>> I'd rather use a new store interface, since I've changed the default >>> store >>> to exclude the "hidden" documents from results, and this is making it >>> hard >>> to ignore the hidden setting even from internal code. >>> >> >> We discussed another way to do this with Vincent: >> - new QueryFilter interface, with one method QueryFilter#filter(String >> statement, String language) >> - new Query.setFilter(Filter)/getFilter() methods (could be add/remove) >> - Query.getStatement() returns the filtered statement if there's a >> filter to apply >> >> I have a PoC with a TechnicalContentFilter (but TBH I'd rather name it >> HiddenDocumentFilter) which encapsulate the old XWikiHibernateStore >> doc.hidden filtering. >> I do a setFilter(new TechnicalContentFilter()) in the DefaultQuery >> construtor and it works fine. It could be extended and it's easily >> "disableable" through Query#setFilter(null). >> >> The only think I'm not sure how to resolve is the filtering of named >> queries, I can't think of an easy way to support them with what is >> explained above. >> >>> >>>> * Remove the notion of hidden documents and have a migrator to remove >>>> the >>>> column in xwikidocs >>> >>> >>> >>> +1. >>> >>> >>>> * Modify the Lucene plugin to add a VISIBILITY field and return filtered >>>> results based on the visibility and the current user role >>> >>> >>> >>> +1. >>> >>> >>>> * Note1: After much brainstorming we think that the notion of >>>> "application" could be implemented either with an Application XObject >>>> that >>>> tie the document to an application or with an Application Descriptor. >>>> * Note2: We'll need to decide at some point if we want more roles than >>>> just "simple user" and "advanced user" and if we need "developer" and >>>> "admin" too. >>> >>> >>> >>> +1 for more roles in the future. >>> >> >> We talked about the first 5 minutes with Caty, also about roles and >> the fact that having an arbitrary mapping between roles >> (simple/advanced) and displayed actions/items (hidden pages, keyboard >> shortcuts, etc) may not be the best way to do it. What we talked about >> was: >> >> - display a "Get started" wizard the first time a user logs in (it was >> actually the starting point of the discussion) >> - when the user finishes or dismisses the wizard, he's asked to choose >> a "flavor": simple, advanced, developer, etc >> - choosing a flavor sets some properties (display hidden documents, >> enable keyboard shortcuts, watch whole wiki for admins, etc) in his >> profile. Note: since those props will be set to "yes/no" but not >> "undefined" we could know if the user went through the get started >> guide by checking the value of one of this prop. >> - a user can later fine tune his settings by editing his preferences >> >> WDYT ? > > > That's for another thread, but in principle I agree. > >
Yes, I was mentioning it because it doesn't fit with the role/visibility proposal. >>> >>>> * Notes1 and 2 are currently out of scope for this proposal >>>> >>>> However we're wondering how much performance we will loose with this >>>> implementation using XObjects (due to the extra JOIN). >>> >>> >>> >>> With the proper indexes in place, and if we only use this check when >>> running >>> queries from the wiki, it shouldn't have a big impact. >>> >>> >>>> Do you think it's acceptable? >>>> >>>> Could it be improved with custom mapping? (I think not) >>> >>> >>> >>> Not that much, custom mapping helps only when there are objects with lots >>> of >>> properties in them. >>> >>> >>>> Should we implement this without XObjects and instead modify >>>> XWikiDocuments and add a new column in xwikidocs? >>> >>> >>> >>> This would be better for performance (less joins). >>> > > > -- > Sergiu Dumitriu > http://purl.org/net/sergiu/ > _______________________________________________ > devs mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/devs -- Jean-Vincent Drean, XWiki. _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

