2014-04-22 17 views
5

Mam pojemnik oparty na Zręczności, który mieści się w elemencie Zręczności. Muszę pozwolić użytkownikom anonimowym dodawać obiekty tego typu do kontenera.Zezwalaj użytkownikom anonimowym na dodawanie obiektów zręcznościowych

już utworzony plik rolemap.xml z następujących czynności:

<?xml version="1.0"?> 
<rolemap> 
    <permissions> 
    <permission name="my.package: Add My Type" acquire="True"> 
     <role name="Anonymous"/> 
    </permission> 
    </permissions> 
</rolemap> 

oświadczyłem pozwolenie na configure.zcml:

<permission 
    id="my.package.AddMyType" 
    title="my.package: Add My Type" 
    /> 

i wreszcie I dodaje niestandardowe dodać widok podobny do tego:

class MyAddView(dexterity.AddForm): 
    grok.name('MyType') 
    grok.require('my.package.AddMyType') 

formularz jest już wyświetlany jako anonimowy ale po naciśnięciu przycisku zapisu przekierowuję mnie do formularza logowania.

również, zalogowani użytkownicy są również w stanie zobaczyć formularz, co nie powinno mieć miejsca.

co jeszcze muszę zrobić?

Odpowiedz

5

dzięki David Glick, który mnie przewodnikiem, skończyło się z bardzo prostego rozwiązania obejmującego metodę add klasy AddForm:

class MyAddView(dexterity.AddForm): 
    grok.name('MyType') 
    grok.require('my.package.AddMyType') 

    def update(self): 
     # check here if the user is anonymous and raise exception if not 
     super(AddView, self).update() 

    def add(self, object): 
     container = aq_inner(self.context) 
     addContentToContainer(container, object, checkConstraints=False) 
     self.immediate_view = container.absolute_url() 

aby go lepiej zrozumieć, warto przyjrzeć się original code in plone.dexterity.

jedną ważną rzeczą, którą możesz również zauważyć, jest to, że prawdopodobnie musisz poprawić uprawnienia do przepływu pracy, aby usunąć rolę niektórych z nich, lub możesz skończyć z treścią edytowaną przez anonimowych użytkowników.

Powiązane problemy