Jak obejít kontrolu oprávnění?
Ve spoustě případů je třeba provést celý skript nebo jenom část algoritmu skriptu nebo metody třídy s vyššími oprávněními než má uživatel, pod kterým je daný skript nebo metoda spuštěna.
Nejlepší, aspoň pro mě, je konkrétní příklad, takže zde je okomentovaný fragment kódu, který Vám umožní provést část kódu s oprávněními libovolného na Vašem portále existujícího uživatele. Většinou je třeba provést kód s vyššími oprávněními než má aktuální uživatel.
Tento kód je určen do standardního python kódu nebo externích metod. Pokud potřebujete zvýšit oprávnění ve Script (Python) ve skins, použijte metodu Proxy, popsanou níže.
# importy potřebné k níže uvedenému kódu from AccessControl import ClassSecurityInfo, getSecurityManager from AccessControl.SecurityManagement import newSecurityManager, setSecurityManager from Products.CMFCore.utils import getToolByName
# ziskání objektu portal (Plone site)
portal = getToolByName(self, 'portal_url').getPortalObject()
# získání objektu root portálu (Zope root)
app = portal.getPhysicalRoot()
# ulozeni SecurityManageru s oprávněními usera, pod kterým je kód spuštěn
sm = getSecurityManager()
try:
# získání objektu admin usera portálu
user = app.acl_users.getUser('admin user vaseho portalu')
try:
# vytvoření a zavedení SecurityManagera s oprávněním Vámi zadaného admin usera
newSecurityManager(None, user)
# zde napiste svuj kod, který bude proveden pod Vámi zadaným admin userem
except:
# zde ošetřete výjimky, pokud je třeba, jinak ponechte takto
raise
finally:
# znovuzavedení SecurityManagera s oprávněními usera, pod kterým byl kód spuštěn
setSecurityManager(sm)
Pokud chcete provést celý skript s oprávněními jiného uživatele, než pod kterým je spouštěn, je nejjednodušší nastavit v ZMI danému skriptu proxy. Při editaci skriptu v ZMI se přepnete na záložku Proxy, kde vyberete skupinu nebo skupiny, s jejichž oprávněními se má daný skript provést. Uložíte změny a máte hotovo.
