[Erp5-report] r12775 - in /spec/debian/unstable/erp5-erp5security: ./ ERP5Security/ ERP5Sec...
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Feb 15 18:21:43 CET 2007
Author: yusei
Date: Thu Feb 15 18:21:37 2007
New Revision: 12775
URL: http://svn.erp5.org?rev=12775&view=rev
Log:
added debian package and workspace.
Added:
spec/debian/unstable/erp5-erp5security/
spec/debian/unstable/erp5-erp5security/ERP5Security/
spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5GroupManager.py
spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5RoleManager.py
spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5UserManager.py
spec/debian/unstable/erp5-erp5security/ERP5Security/MAINTAINERS.txt
spec/debian/unstable/erp5-erp5security/ERP5Security/VERSION.txt
spec/debian/unstable/erp5-erp5security/ERP5Security/__init__.py
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/changelog
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/compat
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/control
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/copyright
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/dzproduct
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/postinst
spec/debian/unstable/erp5-erp5security/ERP5Security/debian/rules (with props)
spec/debian/unstable/erp5-erp5security/ERP5Security/refresh.txt
spec/debian/unstable/erp5-erp5security/ERP5Security/tests/
spec/debian/unstable/erp5-erp5security/ERP5Security/tests/__init__.py
spec/debian/unstable/erp5-erp5security/ERP5Security/tests/testERP5Security.py
spec/debian/unstable/erp5-erp5security/ERP5Security/www/
spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5GroupManager.zpt
spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5RoleManager.zpt
spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5UserManager.zpt
spec/debian/unstable/erp5-erp5security/ERP5Security/www/portal.gif (with props)
spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.diff.gz (with props)
spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.dsc
spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_all.deb (with props)
spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.build
spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.changes
spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14.orig.tar.gz (with props)
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5GroupManager.py
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5GroupManager.py?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5GroupManager.py (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5GroupManager.py Thu Feb 15 18:21:37 2007
@@ -1,0 +1,197 @@
+##############################################################################
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights
+# Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (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.
+#
+##############################################################################
+""" Classes: ERP5GroupManager
+"""
+
+from Globals import InitializeClass
+from AccessControl import ClassSecurityInfo
+from AccessControl.SecurityManagement import newSecurityManager,\
+ getSecurityManager, setSecurityManager
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+from Products.PluggableAuthService.plugins.BasePlugin import BasePlugin
+from Products.PluggableAuthService.utils import classImplements
+from Products.PluggableAuthService.interfaces.plugins import IGroupsPlugin
+from Products.ERP5Type.Cache import CachingMethod
+from Products.PluggableAuthService.PropertiedUser import PropertiedUser
+from ZODB.POSException import ConflictError
+
+import sys
+
+from zLOG import LOG, WARNING
+
+from ERP5UserManager import SUPER_USER
+
+class ConsistencyError(Exception): pass
+
+manage_addERP5GroupManagerForm = PageTemplateFile(
+ 'www/ERP5Security_addERP5GroupManager', globals(),
+ __name__='manage_addERP5GroupManagerForm' )
+
+def addERP5GroupManager( dispatcher, id, title=None, REQUEST=None ):
+ """ Add a ERP5GroupManager to a Pluggable Auth Service. """
+
+ egm = ERP5GroupManager(id, title)
+ dispatcher._setObject(egm.getId(), egm)
+
+ if REQUEST is not None:
+ REQUEST['RESPONSE'].redirect(
+ '%s/manage_workspace'
+ '?manage_tabs_message='
+ 'ERP5GroupManager+added.'
+ % dispatcher.absolute_url())
+
+class ERP5GroupManager(BasePlugin):
+
+ """ PAS plugin for dynamically adding Groups
+ based on Assignments in ERP5
+ """
+ meta_type = 'ERP5 Group Manager'
+
+ security = ClassSecurityInfo()
+
+ def __init__(self, id, title=None):
+
+ self._id = self.id = id
+ self.title = title
+
+ #
+ # IGroupsPlugin implementation
+ #
+ def getGroupsForPrincipal(self, principal, request=None):
+ """ See IGroupsPlugin.
+ """
+ # If this is the super user, skip the check.
+ if principal.getId() == SUPER_USER:
+ return ()
+
+ def _getGroupsForPrincipal(user_name, path):
+ security_category_dict = {} # key is the base_category_list,
+ # value is the list of fetched categories
+ security_group_list = []
+ security_definition_list = ()
+
+ # because we aren't logged in, we have to create our own
+ # SecurityManager to be able to access the Catalog
+ sm = getSecurityManager()
+ if sm.getUser() != SUPER_USER:
+ newSecurityManager(self, self.getUser(SUPER_USER))
+ try:
+ # To get the complete list of groups, we try to call the
+ # ERP5Type_getSecurityCategoryMapping which should return a list
+ # of lists of two elements (script, base_category_list) like :
+ # (
+ # ('script_1', ['base_category_1', 'base_category_2', ...]),
+ # ('script_2', ['base_category_1', 'base_category_3', ...])
+ # )
+ #
+ # else, if the script does not exist, falls back to a list containng
+ # only one list :
+ # (('ERP5Type_getSecurityCategoryFromAssignment',
+ # self.getPortalAssignmentBaseCategoryList() ),)
+
+ mapping_method = getattr(self,
+ 'ERP5Type_getSecurityCategoryMapping', None)
+ if mapping_method is None:
+ security_definition_list = ((
+ 'ERP5Type_getSecurityCategoryFromAssignment',
+ self.getPortalAssignmentBaseCategoryList()
+ ),)
+ else:
+ security_definition_list = mapping_method()
+
+ # get the person from its reference
+ catalog_result = self.portal_catalog(
+ portal_type="Person", reference=user_name)
+ if len(catalog_result) != 1: # we won't proceed with groups
+ if len(catalog_result) > 1: # configuration is screwed
+ raise ConsistencyError, 'There is more than one Person whose \
+ login is %s : %s' % (user_name,
+ repr([r.getObject() for r in catalog_result]))
+ else: # no person is linked to this user login
+ return ()
+ person_object = catalog_result[0].getObject()
+ person_id = person_object.getId()
+
+ # Fetch category values from defined scripts
+ for (method_name, base_category_list) in \
+ security_definition_list:
+ base_category_list = tuple(base_category_list)
+ method = getattr(self, method_name)
+ security_category_list = security_category_dict.setdefault(
+ base_category_list, [])
+ try:
+ security_category_list.extend(
+ method(base_category_list, user_name, person_object, '')
+ )
+ except ConflictError:
+ raise
+ except:
+ LOG('ERP5GroupManager', WARNING,
+ 'could not get security categories from %s' % (method_name,),
+ error = sys.exc_info())
+
+ # Get group names from category values
+ group_id_list_generator = getattr(self,
+ 'ERP5Type_asSecurityGroupIdList', None)
+ if group_id_list_generator is not None:
+ for base_category_list, category_value_list in \
+ security_category_dict.items():
+ for category_dict in category_value_list:
+ try:
+ security_group_list.extend(
+ group_id_list_generator(category_order=base_category_list,
+ **category_dict)
+ )
+ except ConflictError:
+ raise
+ except:
+ LOG('ERP5GroupManager', WARNING,
+ 'could not get security groups from '
+ 'ERP5Type_asSecurityGroupIdList',
+ error = sys.exc_info())
+ else:
+ group_id_generator = getattr(self, 'ERP5Type_asSecurityGroupId')
+ for base_category_list, category_value_list in \
+ security_category_dict.items():
+ for category_dict in category_value_list:
+ try:
+ security_group_list.append(
+ group_id_generator(category_order=base_category_list,
+ **category_dict)
+ )
+ except ConflictError:
+ raise
+ except:
+ LOG('ERP5GroupManager', WARNING,
+ 'could not get security groups from '
+ 'ERP5Type_asSecurityGroupId',
+ error = sys.exc_info())
+ finally:
+ setSecurityManager(sm)
+ return tuple(security_group_list)
+
+ _getGroupsForPrincipal = CachingMethod(_getGroupsForPrincipal,
+ id='ERP5GroupManager_getGroupsForPrincipal')
+ return _getGroupsForPrincipal(
+ user_name=principal.getId(),
+ path=self.getPhysicalPath())
+
+
+
+classImplements( ERP5GroupManager
+ , IGroupsPlugin
+ )
+
+InitializeClass(ERP5GroupManager)
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5RoleManager.py
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5RoleManager.py?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5RoleManager.py (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5RoleManager.py Thu Feb 15 18:21:37 2007
@@ -1,0 +1,83 @@
+##############################################################################
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights
+# Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (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.
+#
+##############################################################################
+""" Classes: ERP5RoleManager
+"""
+
+from Globals import InitializeClass
+from AccessControl import ClassSecurityInfo
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+from Products.PluggableAuthService.plugins.BasePlugin import BasePlugin
+from Products.PluggableAuthService.utils import classImplements
+from Products.PluggableAuthService.interfaces.plugins import IRolesPlugin,\
+ IRoleEnumerationPlugin
+
+from ERP5UserManager import SUPER_USER
+
+manage_addERP5RoleManagerForm = PageTemplateFile(
+ 'www/ERP5Security_addERP5RoleManager', globals(),
+ __name__='manage_addERP5RoleManagerForm' )
+
+def addERP5RoleManager( dispatcher, id, title=None, REQUEST=None ):
+ """ Add a ERP5RoleManager to a Pluggable Auth Service. """
+
+ erm = ERP5RoleManager(id, title)
+ dispatcher._setObject(erm.getId(), erm)
+
+ if REQUEST is not None:
+ REQUEST['RESPONSE'].redirect(
+ '%s/manage_workspace'
+ '?manage_tabs_message='
+ 'ERP5RoleManager+added.'
+ % dispatcher.absolute_url())
+
+class ERP5RoleManager( BasePlugin ):
+
+ """ PAS plugin to add 'Member' as default
+ Role for every user.
+ """
+ meta_type = 'ERP5 Role Manager'
+
+ security = ClassSecurityInfo()
+
+ def __init__(self, id, title=None):
+
+ self._id = self.id = id
+ self.title = title
+
+ #
+ # IRolesPlugin implementation
+ #
+ security.declarePrivate( 'getRolesForPrincipal' )
+ def getRolesForPrincipal( self, principal, request=None ):
+ """ See IRolesPlugin.
+ We only ever return Member for every principal
+ """
+ if principal.getId() == SUPER_USER:
+ # If this is the super user, give all the roles present in this system.
+ # XXX no API to do this in PAS.
+ rolemakers = self._getPAS().plugins.listPlugins( IRoleEnumerationPlugin )
+ roles = []
+ for rolemaker_id, rolemaker in rolemakers:
+ roles.extend([role['id'] for role in rolemaker.enumerateRoles()])
+ return tuple(roles)
+
+ return ('Member',)
+
+classImplements( ERP5RoleManager
+ , IRolesPlugin
+ )
+
+
+InitializeClass(ERP5RoleManager)
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5UserManager.py
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5UserManager.py?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5UserManager.py (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/ERP5UserManager.py Thu Feb 15 18:21:37 2007
@@ -1,0 +1,203 @@
+##############################################################################
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights
+# Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (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.
+#
+##############################################################################
+""" Classes: ERP5UserManager
+"""
+
+from Globals import InitializeClass
+from AccessControl import ClassSecurityInfo
+from AccessControl.SecurityManagement import getSecurityManager,\
+ setSecurityManager, newSecurityManager
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+from Products.PluggableAuthService.PluggableAuthService import _SWALLOWABLE_PLUGIN_EXCEPTIONS
+from Products.PluggableAuthService.plugins.BasePlugin import BasePlugin
+from Products.PluggableAuthService.utils import classImplements
+from Products.PluggableAuthService.interfaces.plugins import IAuthenticationPlugin
+from Products.PluggableAuthService.interfaces.plugins import IUserEnumerationPlugin
+from Products.ERP5Type.Cache import CachingMethod
+from ZODB.POSException import ConflictError
+import sys
+
+from zLOG import LOG
+
+try :
+ from AccessControl.AuthEncoding import pw_validate
+except ImportError:
+ pw_validate = lambda reference, attempt: reference == attempt
+
+# This user is used to bypass all security checks.
+SUPER_USER = '__erp5security-=__'
+
+manage_addERP5UserManagerForm = PageTemplateFile(
+ 'www/ERP5Security_addERP5UserManager', globals(),
+ __name__='manage_addERP5UserManagerForm' )
+
+def addERP5UserManager(dispatcher, id, title=None, REQUEST=None):
+ """ Add a ERP5UserManagern to a Pluggable Auth Service. """
+
+ eum = ERP5UserManager(id, title)
+ dispatcher._setObject(eum.getId(), eum)
+
+ if REQUEST is not None:
+ REQUEST['RESPONSE'].redirect(
+ '%s/manage_workspace'
+ '?manage_tabs_message='
+ 'ERP5UserManager+added.'
+ % dispatcher.absolute_url())
+
+class ERP5UserManager(BasePlugin):
+ """ PAS plugin for managing users in ERP5
+ """
+
+ meta_type = 'ERP5 User Manager'
+
+ security = ClassSecurityInfo()
+
+ def __init__(self, id, title=None):
+
+ self._id = self.id = id
+ self.title = title
+
+ #
+ # IAuthenticationPlugin implementation
+ #
+ security.declarePrivate( 'authenticateCredentials' )
+ def authenticateCredentials(self, credentials):
+ """ See IAuthenticationPlugin.
+
+ o We expect the credentials to be those returned by
+ ILoginPasswordExtractionPlugin.
+ """
+ # Forbidden the usage of the super user.
+ if credentials.get('login') == SUPER_USER:
+ return None
+
+ def _authenticateCredentials(login, password, path):
+ if not login or not password:
+ return None
+
+ user_list = self.getUserByLogin(login)
+
+ if not user_list:
+ return None
+
+ user = user_list[0]
+
+ sm = getSecurityManager()
+ if sm.getUser() != SUPER_USER:
+ newSecurityManager(self, self.getUser(SUPER_USER))
+ try:
+ if pw_validate(user.getPassword(), password) and\
+ user.getCareerRole() == 'internal':
+ return login, login # use same for user_id and login
+ finally:
+ setSecurityManager(sm)
+
+ return None
+
+ _authenticateCredentials = CachingMethod(_authenticateCredentials,
+ id='ERP5UserManager_authenticateCredentials')
+ return _authenticateCredentials(
+ login=credentials.get('login'),
+ password=credentials.get('password'),
+ path=self.getPhysicalPath())
+
+ #
+ # IUserEnumerationPlugin implementation
+ #
+ security.declarePrivate( 'enumerateUsers' )
+ def enumerateUsers(self, id=None, login=None, exact_match=False,
+ sort_by=None, max_results=None, **kw):
+ """ See IUserEnumerationPlugin.
+ """
+ def _enumerateUsers(id_tuple, exact_match, path):
+ user_info = []
+ plugin_id = self.getId()
+
+ id_list = []
+ for id in id_tuple:
+ if SUPER_USER == id:
+ info = { 'id' : SUPER_USER
+ , 'login' : SUPER_USER
+ , 'pluginid' : plugin_id
+ }
+ user_info.append(info)
+ else:
+ if exact_match:
+ id_list.append(id)
+ else:
+ id_list.append('%%%s%%' % id)
+
+ if id_list:
+ for user in self.getUserByLogin(tuple(id_list)):
+ info = { 'id' : user.getReference()
+ , 'login' : user.getReference()
+ , 'pluginid' : plugin_id
+ }
+
+ user_info.append(info)
+
+ return tuple(user_info)
+
+ _enumerateUsers = CachingMethod(_enumerateUsers,
+ id='ERP5UserManager_enumerateUsers')
+
+ if id is None:
+ id = login
+ if isinstance(id, str):
+ id = (id,)
+ if isinstance(id, list):
+ id = tuple(id)
+ return _enumerateUsers(id_tuple=id,
+ exact_match=exact_match,
+ path=self.getPhysicalPath())
+
+ def getUserByLogin(self, login):
+ """
+ Search the Catalog for login and return a list of person objects
+ login can be a string or a list of strings
+ """
+ if not login:
+ return []
+ # because we aren't logged in, we have to create our own
+ # SecurityManager to be able to access the Catalog
+ sm = getSecurityManager()
+ if sm.getUser() != SUPER_USER:
+ newSecurityManager(self, self.getUser(SUPER_USER))
+
+ try:
+ try:
+ result = self.getPortalObject().portal_catalog(
+ portal_type="Person", reference=login)
+ except ConflictError:
+ raise
+ except:
+ LOG('ERP5Security', 0, 'getUserByLogin failed', error=sys.exc_info())
+ # Here we must raise an exception to prevent calers from caching
+ # a result of a degraded situation.
+ # The kind of exception does not matter as long as it's catched by
+ # PAS and causes a lookup using another plugin or user folder.
+ # As PAS does not define explicitely such exception, we must use
+ # the _SWALLOWABLE_PLUGIN_EXCEPTIONS list.
+ raise _SWALLOWABLE_PLUGIN_EXCEPTIONS[0]
+ finally:
+ setSecurityManager(sm)
+ return [item.getObject() for item in result]
+
+classImplements( ERP5UserManager
+ , IAuthenticationPlugin
+ , IUserEnumerationPlugin
+ )
+
+InitializeClass(ERP5UserManager)
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/MAINTAINERS.txt
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/MAINTAINERS.txt?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/MAINTAINERS.txt (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/MAINTAINERS.txt Thu Feb 15 18:21:37 2007
@@ -1,0 +1,2 @@
+alex
+aurel
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/VERSION.txt
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/VERSION.txt?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/VERSION.txt (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/VERSION.txt Thu Feb 15 18:21:37 2007
@@ -1,0 +1,1 @@
+ERP5Security 0.14
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/__init__.py
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/__init__.py?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/__init__.py (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/__init__.py Thu Feb 15 18:21:37 2007
@@ -1,0 +1,90 @@
+##############################################################################
+#
+# Copyright (c) 2001 Zope Corporation and Contributors. All Rights
+# Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (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.
+#
+##############################################################################
+""" ERP5Security product initialization.
+"""
+
+from copy import deepcopy
+
+from AccessControl.Permissions import manage_users as ManageUsers
+from Products.PluggableAuthService.PluggableAuthService import registerMultiPlugin
+from Products.PluggableAuthService.permissions import ManageGroups
+
+import ERP5UserManager
+import ERP5GroupManager
+import ERP5RoleManager
+
+def mergedLocalRoles(object):
+ """Returns a merging of object and its ancestors'
+ __ac_local_roles__."""
+ # Modified to take into account _getAcquireLocalRoles
+ merged = {}
+ object = getattr(object, 'aq_inner', object)
+ while 1:
+ if hasattr(object, '__ac_local_roles__'):
+ dict = object.__ac_local_roles__ or {}
+ if callable(dict): dict = dict()
+ for k, v in dict.items():
+ if merged.has_key(k):
+ merged[k] = merged[k] + v
+ else:
+ merged[k] = v
+ # block acquisition
+ if hasattr(object, '_getAcquireLocalRoles'):
+ if not object._getAcquireLocalRoles():
+ break
+ if hasattr(object, 'aq_parent'):
+ object=object.aq_parent
+ object=getattr(object, 'aq_inner', object)
+ continue
+ if hasattr(object, 'im_self'):
+ object=object.im_self
+ object=getattr(object, 'aq_inner', object)
+ continue
+ break
+
+ return deepcopy(merged)
+
+registerMultiPlugin(ERP5UserManager.ERP5UserManager.meta_type)
+registerMultiPlugin(ERP5GroupManager.ERP5GroupManager.meta_type)
+registerMultiPlugin(ERP5RoleManager.ERP5RoleManager.meta_type)
+
+def initialize(context):
+
+ context.registerClass( ERP5UserManager.ERP5UserManager
+ , permission=ManageUsers
+ , constructors=(
+ ERP5UserManager.manage_addERP5UserManagerForm,
+ ERP5UserManager.addERP5UserManager, )
+ , visibility=None
+ , icon='www/portal.gif'
+ )
+
+ context.registerClass( ERP5GroupManager.ERP5GroupManager
+ , permission=ManageGroups
+ , constructors=(
+ ERP5GroupManager.manage_addERP5GroupManagerForm,
+ ERP5GroupManager.addERP5GroupManager, )
+ , visibility=None
+ , icon='www/portal.gif'
+ )
+
+ context.registerClass( ERP5RoleManager.ERP5RoleManager
+ , permission=ManageUsers
+ , constructors=(
+ ERP5RoleManager.manage_addERP5RoleManagerForm,
+ ERP5RoleManager.addERP5RoleManager, )
+ , visibility=None
+ , icon='www/portal.gif'
+ )
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/changelog
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/changelog?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/changelog (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/changelog Thu Feb 15 18:21:37 2007
@@ -1,0 +1,6 @@
+erp5-erp5security (0.14-1) unstable; urgency=low
+
+ * Initial Release.
+
+ -- Yusei TAHARA <yusei at domen.cx> Wed, 14 Feb 2007 03:27:56 +0900
+
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/compat
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/compat?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/compat (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/compat Thu Feb 15 18:21:37 2007
@@ -1,0 +1,1 @@
+5
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/control
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/control?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/control (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/control Thu Feb 15 18:21:37 2007
@@ -1,0 +1,15 @@
+Source: erp5-erp5security
+Section: web
+Priority: optional
+Maintainer: Yusei TAHARA
+Build-Depends: debhelper (>= 5.0)
+Build-Depends-Indep: zope-debhelper (>= 0.3.6)
+Standards-Version: 3.7.2
+
+Package: erp5-erp5security
+Architecture: all
+Depends: erp5-zope
+Description: A collection of plugins for Pluggable Auth Service to manage ERP5 security
+ This zope product is a plugin to Pluggable Auth Service, to manage roles,
+ groups and users in ERP5. It also add fine security management features to
+ ERP5.
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/copyright
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/copyright?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/copyright (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/copyright Thu Feb 15 18:21:37 2007
@@ -1,0 +1,2 @@
+ Copyright (c) 2001 Zope Corporation and Contributors. All Rights
+ Reserved.
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/dzproduct
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/dzproduct?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/dzproduct (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/dzproduct Thu Feb 15 18:21:37 2007
@@ -1,0 +1,3 @@
+Name: ERP5Security
+Package: erp5-erp5security
+ZopeVersions: >= 2.7
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/postinst
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/postinst?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/postinst (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/postinst Thu Feb 15 18:21:37 2007
@@ -1,0 +1,7 @@
+#!/bin/sh -e
+
+. /usr/share/debconf/confmodule
+
+#DEBHELPER#
+
+db_stop
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/rules
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/debian/rules?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/debian/rules (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/debian/rules Thu Feb 15 18:21:37 2007
@@ -1,0 +1,44 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+pwd := $(shell pwd)
+debian := $(pwd)/debian/erp5-erp5security
+
+build: build-stamp
+build-stamp:
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+ dh_installerp5zope .
+
+binary-indep: build install
+ dh_testdir
+ dh_testroot
+ dh_installdocs
+ dh_installexamples
+ dh_installchangelogs
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary-arch:
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary install
Propchange: spec/debian/unstable/erp5-erp5security/ERP5Security/debian/rules
------------------------------------------------------------------------------
svn:executable =
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/refresh.txt
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/refresh.txt?rev=12775&view=auto
==============================================================================
(empty)
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/tests/__init__.py
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/tests/__init__.py?rev=12775&view=auto
==============================================================================
(empty)
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/tests/testERP5Security.py
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/tests/testERP5Security.py?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/tests/testERP5Security.py (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/tests/testERP5Security.py Thu Feb 15 18:21:37 2007
@@ -1,0 +1,364 @@
+##############################################################################
+#
+# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved.
+# Jerome Perrin <jerome at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsability of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# garantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+"""Tests ERP5 User Management.
+"""
+import os, sys
+if __name__ == '__main__':
+ execfile(os.path.join(sys.path[0], 'framework.py'))
+
+# Needed in order to have a log file inside the current folder
+os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
+os.environ['EVENT_LOG_SEVERITY'] = '-300'
+
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase,\
+ get_request
+from AccessControl.SecurityManagement import newSecurityManager
+from AccessControl.SecurityManagement import getSecurityManager
+from zLOG import LOG
+from Products.ERP5Type.Cache import clearCache
+from Products.PluggableAuthService import PluggableAuthService
+try:
+ from Interface.Verify import verifyClass
+except ImportError:
+ from zope.interface.verify import verifyClass
+
+class TestUserManagement(ERP5TypeTestCase):
+ """Tests User Management in ERP5Security.
+ """
+
+ def getTitle(self):
+ """Title of the test."""
+ return "ERP5Security: User Management"
+
+ def getBusinessTemplateList(self):
+ """List of BT to install. """
+ return ('erp5_base',)
+
+ def beforeTearDown(self):
+ """Clears person module and invalidate caches when tests are finished."""
+ clearCache()
+ self.getPersonModule().manage_delObjects([x for x in
+ self.getPersonModule().objectIds()])
+ get_transaction().commit()
+ self.tic()
+
+ def login(self):
+ uf = self.getUserFolder()
+ uf._doAddUser('alex', '', ['Manager', 'Assignee', 'Assignor',
+ 'Associate', 'Auditor', 'Author'], [])
+ user = uf.getUserById('alex').__of__(uf)
+ newSecurityManager(None, user)
+
+ def getUserFolder(self):
+ """Returns the acl_users. """
+ return self.getPortal().acl_users
+
+ def test_GroupManagerInterfaces(self):
+ """Tests group manager plugin respects interfaces."""
+ # XXX move to GroupManager test class
+ from Products.PluggableAuthService.interfaces.plugins import IGroupsPlugin
+ from Products.ERP5Security.ERP5GroupManager import ERP5GroupManager
+ verifyClass(IGroupsPlugin, ERP5GroupManager)
+
+ def test_UserManagerInterfaces(self):
+ """Tests user manager plugin respects interfaces."""
+ from Products.PluggableAuthService.interfaces.plugins import\
+ IAuthenticationPlugin, IUserEnumerationPlugin
+ from Products.ERP5Security.ERP5UserManager import ERP5UserManager
+ verifyClass(IAuthenticationPlugin, ERP5UserManager)
+ verifyClass(IUserEnumerationPlugin, ERP5UserManager)
+
+ def test_UserFolder(self):
+ """Tests user folder has correct meta type."""
+ self.failUnless(isinstance(self.getUserFolder(),
+ PluggableAuthService.PluggableAuthService))
+
+ def _makePerson(self, **kw):
+ """Creates a person in person module, and returns the object, after
+ indexing is done. """
+ person_module = self.getPersonModule()
+ new_person = person_module.newContent(
+ portal_type='Person', **kw)
+ get_transaction().commit()
+ self.tic()
+ return new_person
+
+ def _assertUserExists(self, login, password):
+ """Checks that a user with login and password exists and can log in to the
+ system.
+ """
+ from Products.PluggableAuthService.interfaces.plugins import\
+ IAuthenticationPlugin
+ uf = self.getUserFolder()
+ self.assertNotEquals(uf.getUserById(login, None), None)
+ for plugin_name, plugin in uf._getOb('plugins').listPlugins(
+ IAuthenticationPlugin ):
+ if plugin.authenticateCredentials(
+ {'login':login, 'password':password}) is not None:
+ break
+ else:
+ self.fail("No plugin could authenticate '%s' with password '%s'" %
+ (login, password))
+
+ def _assertUserDoesNotExists(self, login, password):
+ """Checks that a user with login and password does not exists and cannot
+ log in to the system.
+ """
+ from Products.PluggableAuthService.interfaces.plugins import\
+ IAuthenticationPlugin
+ uf = self.getUserFolder()
+ for plugin_name, plugin in uf._getOb('plugins').listPlugins(
+ IAuthenticationPlugin ):
+ if plugin.authenticateCredentials(
+ {'login':login, 'password':password}) is not None:
+ self.fail(
+ "Plugin %s should not have authenticated '%s' with password '%s'" %
+ (plugin_name, login, password))
+
+ def test_PersonWithLoginPasswordAreUsers(self):
+ """Tests a person with a login & password is a valid user."""
+ p = self._makePerson(reference='the_user', password='secret',
+ career_role='internal')
+ self._assertUserExists('the_user', 'secret')
+
+ def test_PersonLoginCaseSensitive(self):
+ """Login/password are case sensitive."""
+ p = self._makePerson(reference='the_user', password='secret',
+ career_role='internal')
+ self._assertUserDoesNotExists('the_User', 'secret')
+
+ def test_PersonLoginNonAscii(self):
+ """Login can contain non ascii chars."""
+ p = self._makePerson(reference='j\xc3\xa9', password='secret',
+ career_role='internal')
+ self._assertUserExists('j\xc3\xa9', 'secret')
+
+ def test_PersonWithLoginWithEmptyPasswordAreNotUsers(self):
+ """Tests a person with a login but no password is not a valid user."""
+ self._makePerson(reference='the_user', career_role='internal')
+ self._assertUserDoesNotExists('the_user', None)
+ self._makePerson(reference='another_user', password='',
+ career_role='internal')
+ self._assertUserDoesNotExists('another_user', '')
+
+ def test_PersonWithEmptyLoginAreNotUsers(self):
+ """Tests a person with a login & password is a valid user."""
+ self._makePerson(reference='', password='secret', career_role='internal')
+ self._assertUserDoesNotExists('', 'secret')
+
+ def test_PersonWithSuperUserLoginCannotBeCreated(self):
+ """Tests one cannot create person with the "super user" special login."""
+ from Products.ERP5Security.ERP5UserManager import SUPER_USER
+ self.assertRaises(RuntimeError, self._makePerson, reference=SUPER_USER)
+
+ def test_PersonWithSuperUserLogin(self):
+ """Tests one cannot use the "super user" special login."""
+ from Products.ERP5Security.ERP5UserManager import SUPER_USER
+ self._assertUserDoesNotExists(SUPER_USER, '')
+
+ def test_MultiplePersonReference(self):
+ """Tests that it's refused to create two Persons with same reference."""
+ self._makePerson(reference='new_person')
+ self.assertRaises(RuntimeError, self._makePerson, reference='new_person')
+
+ def test_PersonCopyAndPaste(self):
+ """If we copy and paste a person, login must not be copyied."""
+ person = self._makePerson(reference='new_person')
+ person_module = self.getPersonModule()
+ copy_data = person_module.manage_copyObjects([person.getId()])
+ changed, = person_module.manage_pasteObjects(copy_data)
+ self.assertNotEquals(person_module[changed['new_id']].getReference(),
+ person_module[changed['id']].getReference())
+
+class TestLocalRoleManagement(ERP5TypeTestCase):
+ """Tests Local Role Management with ERP5Security.
+
+ This test should probably part of ERP5Type ?
+ """
+ def getTitle(self):
+ return "ERP5Security: User Role Management"
+
+ def afterSetUp(self):
+ """Called after setup completed.
+ """
+ self.portal = self.getPortal()
+ # configure group, site, function categories
+ for bc in ['group', 'site', 'function']:
+ base_cat = self.getCategoryTool()[bc]
+ code = bc[0].upper()
+ base_cat.newContent(portal_type='Category',
+ id='subcat',
+ codification="%s1" % code)
+ self.defined_category = "group/subcat\n"\
+ "site/subcat\n"\
+ "function/subcat"
+ # any member can add organisations
+ self.portal.organisation_module.manage_permission(
+ 'Add portal content', roles=['Member', 'Manager'], acquire=1)
+
+ self.username = 'username'
+ # create a user and open an assignement
+ pers = self.getPersonModule().newContent(portal_type='Person',
+ career_role='internal',
+ reference=self.username,
+ password=self.username)
+ assignment = pers.newContent( portal_type='Assignment',
+ group='subcat',
+ site='subcat',
+ function='subcat' )
+ assignment.open()
+ get_transaction().commit()
+ self.tic()
+
+ def beforeTearDown(self):
+ """Called before teardown."""
+ # clear base categories
+ for bc in ['group', 'site', 'function']:
+ base_cat = self.getCategoryTool()[bc]
+ base_cat.manage_delObjects([x for x in base_cat.objectIds()])
+ # clear role definitions
+ for ti in self.getTypesTool().objectValues(spec=('ERP5 Type Information',)):
+ ti._roles = ()
+ # clear modules
+ for module in self.portal.objectValues(spec=('ERP5 Folder',)):
+ module.manage_delObjects([x for x in module.objectIds()])
+ # commit this
+ get_transaction().commit()
+ self.tic()
+ clearCache()
+
+ def loginAsUser(self, username):
+ uf = self.portal.acl_users
+ user = uf.getUserById(username).__of__(uf)
+ newSecurityManager(None, user)
+
+ def _getTypeInfo(self):
+ return self.getTypesTool()['Organisation']
+
+ def _getModuleTypeInfo(self):
+ return self.getTypesTool()['Organisation Module']
+
+ def _makeOne(self):
+ return self.getOrganisationModule().newContent(portal_type='Organisation')
+
+ def getBusinessTemplateList(self):
+ """List of BT to install. """
+ return ('erp5_base',)
+
+ def test_RolesManagerInterfaces(self):
+ """Tests group manager plugin respects interfaces."""
+ from Products.PluggableAuthService.interfaces.plugins import IRolesPlugin
+ from Products.ERP5Security.ERP5RoleManager import ERP5RoleManager
+ verifyClass(IRolesPlugin, ERP5RoleManager)
+
+ def testMemberRole(self):
+ """Test users have the Member role.
+ """
+ self.loginAsUser(self.username)
+ self.failUnless('Member' in
+ getSecurityManager().getUser().getRolesInContext(self.portal))
+ self.failUnless('Member' in
+ getSecurityManager().getUser().getRoles())
+
+ def testSimpleLocalRole(self):
+ """Test simple case of setting a role.
+ """
+ ti = self._getTypeInfo()
+ ti.addRole(id='Assignor', description='desc.',
+ name='an Assignor role for testing',
+ condition='',
+ category=self.defined_category,
+ base_category_script='ERP5Type_getSecurityCategoryFromAssignment',
+ base_category='')
+ obj = self._makeOne()
+ self.assertEquals(['Assignor'], obj.__ac_local_roles__.get('F1_G1_S1'))
+
+ self.loginAsUser(self.username)
+ self.failUnless('Assignor' in
+ getSecurityManager().getUser().getRolesInContext(obj))
+
+ def testDynamicLocalRole(self):
+ """Test simple case of setting a dynamic role.
+ The site category is not defined explictly the role, and will have the
+ current site of the user.
+ """
+ return NotImplemented # FIXME: currently this test raises error
+
+ ti = self._getTypeInfo()
+ ti.addRole(id='Assignor', description='desc.',
+ name='an Assignor role for testing',
+ condition='',
+ category='group/subcat\nfunction/subcat',
+ base_category_script='ERP5Type_getSecurityCategoryFromAssignment',
+ base_category='site')
+
+ self.loginAsUser(self.username)
+ obj = self._makeOne()
+ self.assertEquals(['Assignor'], obj.__ac_local_roles__.get('F1_G1_S1'))
+ self.failUnless('Assignor' in
+ getSecurityManager().getUser().getRolesInContext(obj))
+
+ def testAcquireLocalRoles(self):
+ """Tests that document does not acquire loal roles from their parents if
+ "acquire local roles" is not checked."""
+ ti = self._getTypeInfo()
+ ti.acquire_local_roles = False
+ module_ti = self._getModuleTypeInfo()
+ module_ti.addRole(id='Assignor', description='desc.',
+ name='an Assignor role for testing',
+ condition='',
+ category=self.defined_category,
+ base_category_script='ERP5Type_getSecurityCategoryFromAssignment',
+ base_category='')
+ obj = self._makeOne()
+ module = obj.getParentValue()
+ module.updateLocalRolesOnSecurityGroups()
+ # we said the we do not want acquire local roles.
+ self.failIf(obj._getAcquireLocalRoles())
+ # the local role is set on the module
+ self.assertEquals(['Assignor'], module.__ac_local_roles__.get('F1_G1_S1'))
+ # but not on the document
+ self.assertEquals(None, obj.__ac_local_roles__.get('F1_G1_S1'))
+ # same testing with roles in context.
+ self.loginAsUser(self.username)
+ self.failUnless('Assignor' in
+ getSecurityManager().getUser().getRolesInContext(module))
+ self.failIf('Assignor' in
+ getSecurityManager().getUser().getRolesInContext(obj))
+
+if __name__ == '__main__':
+ framework()
+else:
+ import unittest
+ def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestUserManagement))
+ suite.addTest(unittest.makeSuite(TestLocalRoleManagement))
+ return suite
+
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5GroupManager.zpt
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5GroupManager.zpt?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5GroupManager.zpt (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5GroupManager.zpt Thu Feb 15 18:21:37 2007
@@ -1,0 +1,46 @@
+<h1 tal:replace="structure here/manage_page_header">Header</h1>
+
+<h2 tal:define="form_title string:Add ERP5 Group Manager"
+ tal:replace="structure here/manage_form_title">Form Title</h2>
+
+<p class="form-help">
+ERP5 Group Manager assigns Groups dynamically to users
+based on Assignments in ERP5
+</p>
+
+<form action="addERP5GroupManager" method="post">
+<table cellspacing="0" cellpadding="2" border="0">
+ <tr>
+ <td align="left" valign="top">
+ <div class="form-label">
+ Id
+ </div>
+ </td>
+ <td align="left" valign="top">
+ <input type="text" name="id" size="40" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">
+ <div class="form-optional">
+ Title
+ </div>
+ </td>
+ <td align="left" valign="top">
+ <input type="text" name="title" size="40" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">
+ </td>
+ <td align="left" valign="top">
+ <div class="form-element">
+ <input class="form-element" type="submit" name="submit"
+ value=" Add " />
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<h1 tal:replace="structure here/manage_page_footer">Footer</h1>
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5RoleManager.zpt
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5RoleManager.zpt?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5RoleManager.zpt (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5RoleManager.zpt Thu Feb 15 18:21:37 2007
@@ -1,0 +1,45 @@
+<h1 tal:replace="structure here/manage_page_header">Header</h1>
+
+<h2 tal:define="form_title string:Add ERP5 Role Manager"
+ tal:replace="structure here/manage_form_title">Form Title</h2>
+
+<p class="form-help">
+ERP5 Role Manager adds 'Member' as default Role for every user.
+</p>
+
+<form action="addERP5RoleManager" method="post">
+<table cellspacing="0" cellpadding="2" border="0">
+ <tr>
+ <td align="left" valign="top">
+ <div class="form-label">
+ Id
+ </div>
+ </td>
+ <td align="left" valign="top">
+ <input type="text" name="id" size="40" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">
+ <div class="form-optional">
+ Title
+ </div>
+ </td>
+ <td align="left" valign="top">
+ <input type="text" name="title" size="40" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">
+ </td>
+ <td align="left" valign="top">
+ <div class="form-element">
+ <input class="form-element" type="submit" name="submit"
+ value=" Add " />
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<h1 tal:replace="structure here/manage_page_footer">Footer</h1>
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5UserManager.zpt
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5UserManager.zpt?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5UserManager.zpt (added)
+++ spec/debian/unstable/erp5-erp5security/ERP5Security/www/ERP5Security_addERP5UserManager.zpt Thu Feb 15 18:21:37 2007
@@ -1,0 +1,46 @@
+<h1 tal:replace="structure here/manage_page_header">Header</h1>
+
+<h2 tal:define="form_title string:Add ERP5 User Manager"
+ tal:replace="structure here/manage_form_title">Form Title</h2>
+
+<p class="form-help">
+ERP5 User Manager applys the users managed in ERP5 person moduel
+to the Pluggable Authentication Service
+</p>
+
+<form action="addERP5UserManager" method="post">
+<table cellspacing="0" cellpadding="2" border="0">
+ <tr>
+ <td align="left" valign="top">
+ <div class="form-label">
+ Id
+ </div>
+ </td>
+ <td align="left" valign="top">
+ <input type="text" name="id" size="40" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">
+ <div class="form-optional">
+ Title
+ </div>
+ </td>
+ <td align="left" valign="top">
+ <input type="text" name="title" size="40" />
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top">
+ </td>
+ <td align="left" valign="top">
+ <div class="form-element">
+ <input class="form-element" type="submit" name="submit"
+ value=" Add " />
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+
+<h1 tal:replace="structure here/manage_page_footer">Footer</h1>
Added: spec/debian/unstable/erp5-erp5security/ERP5Security/www/portal.gif
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/ERP5Security/www/portal.gif?rev=12775&view=auto
==============================================================================
Binary file - no diff available.
Propchange: spec/debian/unstable/erp5-erp5security/ERP5Security/www/portal.gif
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.diff.gz
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.diff.gz?rev=12775&view=auto
==============================================================================
Binary file - no diff available.
Propchange: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.diff.gz
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.dsc
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.dsc?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.dsc (added)
+++ spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1.dsc Thu Feb 15 18:21:37 2007
@@ -1,0 +1,12 @@
+Format: 1.0
+Source: erp5-erp5security
+Version: 0.14-1
+Binary: erp5-erp5security
+Maintainer: Yusei TAHARA
+Architecture: all
+Standards-Version: 3.7.2
+Build-Depends: debhelper (>= 5.0)
+Build-Depends-Indep: zope-debhelper (>= 0.3.6)
+Files:
+ 2dbed0c17992f4eb55d844bb45853f25 9668 erp5-erp5security_0.14.orig.tar.gz
+ b124d355f688a5ad887e23b1bea49237 989 erp5-erp5security_0.14-1.diff.gz
Added: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_all.deb
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_all.deb?rev=12775&view=auto
==============================================================================
Binary file - no diff available.
Propchange: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_all.deb
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.build
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.build?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.build (added)
+++ spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.build Thu Feb 15 18:21:37 2007
@@ -1,0 +1,34 @@
+ fakeroot debian/rules clean
+dh_testdir
+dh_testroot
+rm -f build-stamp configure-stamp
+dh_clean
+ dpkg-source -b ERP5Security
+dpkg-source: warning: source directory `./ERP5Security' is not <sourcepackage>-<upstreamversion> `erp5-erp5security-0.14'
+dpkg-source: warning: .orig directory name ERP5Security.orig is not <package>-<upstreamversion> (wanted erp5-erp5security-0.14.orig)
+dpkg-source: building erp5-erp5security using existing erp5-erp5security_0.14.orig.tar.gz
+dpkg-source: building erp5-erp5security in erp5-erp5security_0.14-1.diff.gz
+dpkg-source: building erp5-erp5security in erp5-erp5security_0.14-1.dsc
+ debian/rules build
+touch build-stamp
+ fakeroot debian/rules binary
+dh_testdir
+dh_testroot
+dh_clean -k
+dh_installdirs
+dh_installerp5zope .
+dh_testdir
+dh_testroot
+dh_installdocs
+dh_installexamples
+dh_installchangelogs
+dh_compress
+dh_fixperms
+dh_installdeb
+dh_gencontrol
+dh_md5sums
+dh_builddeb
+dpkg-deb: `../erp5-erp5security_0.14-1_all.deb' ¤Ë¥Ñ¥Ã¥±¡¼¥¸ `erp5-erp5security' ¤ò¹½ÃÛ¤·¤Æ¤¤¤Þ¤¹¡£
+ dpkg-genchanges
+dpkg-genchanges: including full source code in upload
+dpkg-buildpackage (debuild emulation): full upload (original source is included)
Added: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.changes
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.changes?rev=12775&view=auto
==============================================================================
--- spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.changes (added)
+++ spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14-1_i386.changes Thu Feb 15 18:21:37 2007
@@ -1,0 +1,21 @@
+Format: 1.7
+Date: Wed, 14 Feb 2007 03:27:56 +0900
+Source: erp5-erp5security
+Binary: erp5-erp5security
+Architecture: source all
+Version: 0.14-1
+Distribution: unstable
+Urgency: low
+Maintainer: Yusei TAHARA
+Changed-By: Yusei TAHARA <yusei at domen.cx>
+Description:
+ erp5-erp5security - A collection of plugins for Pluggable Auth Service to manage ERP5
+Changes:
+ erp5-erp5security (0.14-1) unstable; urgency=low
+ .
+ * Initial Release.
+Files:
+ 9689ce3192b34492a851bd5a5e0e124c 382 web optional erp5-erp5security_0.14-1.dsc
+ 2dbed0c17992f4eb55d844bb45853f25 9668 web optional erp5-erp5security_0.14.orig.tar.gz
+ b124d355f688a5ad887e23b1bea49237 989 web optional erp5-erp5security_0.14-1.diff.gz
+ 962d10815068b4d0818a430690ac796c 11778 web optional erp5-erp5security_0.14-1_all.deb
Added: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14.orig.tar.gz
URL: http://svn.erp5.org/spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14.orig.tar.gz?rev=12775&view=auto
==============================================================================
Binary file - no diff available.
Propchange: spec/debian/unstable/erp5-erp5security/erp5-erp5security_0.14.orig.tar.gz
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
More information about the Erp5-report
mailing list