That branch's work was completed merged into versions/next => https://gitlab.com/Michael.Price/mayan-edms/commits/versions/next
On Tuesday, March 6, 2018 at 10:09:31 AM UTC-4, LeVon Smoker wrote: > > Michael, > > Is it possible to get read access to > https://gitlab.com/Michael.Price/mayan-edms/commits/feature/pagesearch_testing > ? > > On Friday, March 2, 2018 at 10:13:05 AM UTC-5, LeVon Smoker wrote: >> >> Thanks!! >> >> On Thursday, March 1, 2018 at 10:56:31 PM UTC-5, Michael Price wrote: >>> >>> The fix for the cabinet pagination was easy. Just make CabinetDetailView >>> a subclass of DocumentListView instead of TemplateView. In the >>> cabinet_details.html remove the lines {% with document_list as object_list >>> %} and {% endwith %} This makes the template display the paginated >>> object_list provided by DocumentListView and not the raw list of documents >>> in the document_list variable. >>> >>> On Thursday, March 1, 2018 at 7:06:03 PM UTC-4, Michael Price wrote: >>>> >>>> Found the root of the problem. DocumentPage is registered with the >>>> permission inheritance but the model returned during page searches is not >>>> DocumentPage but DocumentPageResult. DocumentPageResult has not permission >>>> inheritance relationship to Document. That is the reason no pages are >>>> returned unless you are an admin user. >>>> >>>> The fix involves a few steps: >>>> >>>> 1- Add a permission relationship between DocumentPageResult and >>>> Document. This causes an error. The error is caused because the >>>> inheritance >>>> system only allows database fields or functions, doesn't support related >>>> references. In this case a related references is needed: >>>> DocumentPageResult >>>> -> DocumentVersion -> Document. The related field must allow something >>>> like >>>> 'document_version__document". >>>> 2- Add a function to navigate a related reference down to the actual >>>> model instance being referenced. This function turns the string >>>> 'document_version__document" to the instance of Document being referenced. >>>> 3- Update the AccessControlList.objects.filter_by_access method to use >>>> the return_related instead of the simple getattr. >>>> >>>> This solution allows filtering the queryset at the database instead of >>>> using callable function for each instance in the queryset which is much >>>> faster and cleaner. >>>> >>>> My code in the branch 'feature/pagesearch_testing' at >>>> https://gitlab.com/Michael.Price/mayan-edms/commits/feature/pagesearch_testing. >>>> >>>> Added a 4 tests for document and document page searching with and without >>>> the document view permissions and they pass with no problem. I think every >>>> app that has a searchable object should have a test_search test suit. >>>> >>>> Even after months of working on the code I'm still amazed at how well >>>> written Mayan is. Kudos to Roberto for making something so far ahead than >>>> anything else I've seen in the Django market. >>>> >>>> I'll take a stab at the Cabinet pagination problem. >>>> >>>> Just helping until Roberto is back in full swing :) >>>> >>>> On Thursday, March 1, 2018 at 3:13:27 PM UTC-4, [email protected] >>>> wrote: >>>>> >>>>> I was referring to Mayan's custom permission inheritance which is >>>>> handled by the acls.classes.ModelPermission class. This is different than >>>>> the model inheritance used by Django which is limited to just database >>>>> fields and methods. Django's model inheritance is meant to emulate >>>>> Python's >>>>> class inheritance whose purpose is reduce repetition of code. Mayan >>>>> permission inheritance should be called permission relationships instead >>>>> to >>>>> better reflect its purpose. >>>>> >>>>> Mayan uses two method of the ModelPermission to determine how an >>>>> object inherit permission from another. In the documents.apps file it is >>>>> using the .register_inheritance to correlate the DocumentPage and the >>>>> Document model. >>>>> >>>>> ModelPermission.register_inheritance( >>>>> model=DocumentPage, related='document', >>>>> ) >>>>> >>>>> Before that it is using the .register_proxy to correlate the Document >>>>> model with the DocumentType model. I don't understand the difference. I'm >>>>> tying to figure it out before bothering Roberto for an explanation. >>>>> >>>>> On Thursday, March 1, 2018 at 10:14:50 AM UTC-4, LeVon Smoker wrote: >>>>>> >>>>>> Yes. This specific case is with the DocumentPageResult model which >>>>>> inherits from DocumentPage which inherits from the standard Django model >>>>>> not the Document model. DocumentPage as a 'document' property which I >>>>>> used >>>>>> for my workaround. >>>>>> >>>>>> Maybe there's a way to trick the function into using the document >>>>>> property in certain cases. >>>>>> >>>>>> And while I have your attention, (I think) pagination needs to be >>>>>> added to the Cabinets details views and Index views. I ran into a >>>>>> situation >>>>>> where a Cabinet had over 1000 documents and the browser could not handle >>>>>> rendering all of those thumbnails... >>>>>> >>>>>> And thank you for picking up this great project. >>>>>> >>>>>> On Wednesday, February 28, 2018 at 8:00:39 PM UTC-5, >>>>>> [email protected] wrote: >>>>>>> >>>>>>> So to summarize, the document search works but the page search is >>>>>>> broken, using that permissions scheme? >>>>>>> >>>>>>> Mayan's permission system supports permission inheritance. That >>>>>>> means that if an object is a child object, it will inherit the >>>>>>> permission >>>>>>> requirements of its parent. If you hold the view permission for a >>>>>>> document >>>>>>> type, you automatically have that same permission for all the documents >>>>>>> of >>>>>>> that type and all the pages of the documents of that type. By what you >>>>>>> are >>>>>>> describing it seems the pages are not inheriting the permissions of >>>>>>> their >>>>>>> parent documents. >>>>>>> >>>>>>> On Tuesday, January 30, 2018 at 4:07:20 PM UTC-4, Ray Hendricks >>>>>>> wrote: >>>>>>>> >>>>>>>> I have two document types "Default" and "Personal" >>>>>>>> >>>>>>>> I have two roles "Default Owner" and "Personal Owner" >>>>>>>> >>>>>>>> I have two Groups "Work" and "Personal" >>>>>>>> >>>>>>>> Jim is a member of the group "Work" and Kelly is a member of the >>>>>>>> group "Personal" >>>>>>>> >>>>>>>> The Group "Personal" is a member of the Role "Personal Owner" and >>>>>>>> the Group "Work" is a member of the the Role "Default Owner" >>>>>>>> >>>>>>>> This works in that Jim can't view "Personal" documents but Jim also >>>>>>>> can't search pages (he can search documents though). Is this expected >>>>>>>> behavior? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- --- You received this message because you are subscribed to the Google Groups "Mayan EDMS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
