[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Security - RolePermissionView.py:1.1.2.1
Jim Fulton
jim@zope.com
Thu, 3 Jan 2002 14:08:21 -0500
Update of /cvs-repository/Zope3/lib/python/Zope/App/Security
In directory cvs.zope.org:/tmp/cvs-serv12383
Added Files:
Tag: Zope-3x-branch
RolePermissionView.py
Log Message:
Added view component for managing role-permission settings
=== Added File Zope3/lib/python/Zope/App/Security/RolePermissionView.py ===
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################
"""
Revision information: $Id: RolePermissionView.py,v 1.1.2.1 2002/01/03 19:08:20 jim Exp $
"""
import os, time
from Zope.PageTemplate.PageTemplateFile import PageTemplateFile
from Zope.Publisher.Browser.AttributePublisher import AttributePublisher
from Zope.ComponentArchitecture.ContextDependent import ContextDependent
from Zope.ComponentArchitecture import getService, getAdapter
from Zope.App.Security.IRolePermissionManager import IRolePermissionManager
from Zope.App.Security.IPermission import IPermission
class RolePermissionView(AttributePublisher, ContextDependent):
index = PageTemplateFile( 'manage_access.pt'
, '%s/pt' % os.path.dirname(__file__)
)
def roles(self):
roles = getattr(self, '_roles', None)
if roles is None:
roles = self._roles = getService(
self.getContext(), 'RoleService'
).getRoles()
return roles
def permissions(self):
permissions = getattr(self, '_permissions', None)
if permissions is None:
permissions = self._permissions = getService(
self.getContext(), 'PermissionService'
).getPermissions()
return permissions
def permissionRoles(self):
context = self.getContext()
roles = self.roles()
return [PermissionRoles(permission, context, roles)
for permission in self.permissions()]
def action(self, REQUEST):
roles = [r.getId() for r in self.roles()]
permissions = [p.getId() for p in self.permissions()]
prm = getAdapter(self.getContext(), IRolePermissionManager)
for ip in range(len(permissions)):
rperm = REQUEST.get("p%s" % ip)
if rperm not in permissions: continue
for ir in range(len(roles)):
rrole = REQUEST.get("r%s" % ir)
if rrole not in roles: continue
if REQUEST.has_key("p%sr%s" % (ip, ir)):
prm.grantPermissionToRole(rperm, rrole)
else:
prm.retractPermissionFromRole(rperm, rrole)
return self.index(
message="Settings changed at %s" % time.ctime(time.time())
)
class PermissionRoles:
__implements__ = IPermission
def __init__(self, permission, context, roles):
self._permission = permission
self._context = context
self._roles = [role.getId() for role in roles]
def getId(self):
return self._permission.getId()
def getTitle(self):
return self._permission.getTitle()
def getDescription():
return self._permission.getDescription()
def roles(self):
prm = getAdapter(self._context, IRolePermissionManager)
proles = prm.getRolesForPermission(self._permission.getId())
return [((role in proles) and '1' or None) for role in self._roles]