Informe de permisos por objetos

A veces nos encontramos con la nesidad de analizar detalladamente todos los permisos establecidos en cada objeto

Para facilitarlo podemos ejecutar este script por zopectl debug, y obtener un archivo en formato csv con todos los perfiles por objeto:

site = app.kmkey
from AccessControl.SecurityManagement import newSecurityManager
from Testing.makerequest import makerequest
user = site.acl_users.getUser('manager').__of__(site.acl_users)
newSecurityManager({}, user)
app = makerequest(app)
site = app.kmkey
from Acquisition import aq_base, aq_acquire
context = site.workspaces.kmkey
cat = site.portal_catalog
km = site.workspaces.kmkey
db=site.db
catalog = km.portal_catalog

#Filtrar los objetos que nos  interese
brains = cat(path='/kmkey/workspaces/kmkey/etccc...', meta_type='KM Task',sort_on='relative_path')
len(brains)
obs=[]
i=0
for brain in brains:
  i=i+1
  obs.append(brain.getObject())
  if not i%10:
      i
      site._p_jar.sync()
      site._p_jar.cacheGC()

f=open('/tmp/informe.csv','w')
for ob in obs:
   dm = ob.getContent().getDataModel()
   txt =""""%s";"%s";"%s";"""%(len(ob.getPhysicalPath()),dm['Title'],dm['wbs'])
   roles = ob.get_local_roles()
   #Adaptar para incluir los permisos por grupo
   #groles = ob.get_local_group_roles()
   for item in roles:
       txt = txt + """"%s";"%s";"""%(item[0],' / '.join(item[1]))
   print txt
   f.write(txt+'\n')
f.close()