[Zope-Checkins] CVS: Zope/lib/python/AccessControl - User.py:1.157

Brian Lloyd brian@digicool.com
Fri, 14 Sep 2001 14:00:05 -0400


Update of /cvs-repository/Zope/lib/python/AccessControl
In directory cvs.zope.org:/tmp/cvs-serv7513

Modified Files:
	User.py 
Log Message:
Added new user add, edit and delete apis


=== Zope/lib/python/AccessControl/User.py 1.156 => 1.157 ===
          ('manage_users','getUserNames', 'getUser', 'getUsers',
           'getUserById', 'user_names', 'setDomainAuthenticationMode',
+          'manage_addUser', 'manage_editUser', 'manage_delUsers',
           )
          ),
         )
@@ -526,16 +527,45 @@
            if default is _marker: raise
            return default
 
-    def _doAddUser(self, name, password, roles, domains):
-        """Create a new user"""
+    # As of Zope 2.5, manage_addUser, manage_editUser and manage_delUsers
+    # form the official API for user management. The old grotesque way of
+    # using manage_users is now deprecated. Note that not all user folder
+    # implementations support adding, changing and deleting user objects.
+
+    # The default implementation of these API methods simply call the
+    # _doXXX versions of the methods that user folder authors have already
+    # implemented, which means that these APIs will work for current user
+    # folder implementations without any action on the part of the author.
+
+    # User folder authors that implement the new manage_XXX API can get
+    # rid of the old _doXXX versions of the methods, which are no longer
+    # required (we only use them if the new api is not directly implemented).
+
+    def manage_addUser(self, name, password, roles, domains):
+        """API method for creating a new user object. Note that not all
+           user folder implementations support dynamic creation of user
+           objects. Implementations that do not support dynamic creation
+           of user objects should raise NotImplemented for this method."""
+        if hasattr(self, '_doAddUser'):
+            return self._doAddUser(name, password, roles, domains)
         raise NotImplemented
 
-    def _doChangeUser(self, name, password, roles, domains):
-        """Modify an existing user"""
+    def manage_editUser(self, name, password, roles, domains):
+        """API method for changing user object attributes. Note that not
+           all user folder implementations support changing of user object
+           attributes. Implementations that do not support changing of user
+           object attributes should raise NotImplemented for this method."""
+        if hasattr(self, '_doChangeUser'):
+            return self._doChangeUser(name, password, roles, domains)
         raise NotImplemented
 
-    def _doDelUsers(self, names):
-        """Delete one or more users"""
+    def manage_delUsers(self, names):
+        """API method for deleting one or more user objects. Note that not
+           all user folder implementations support deletion of user objects.
+           Implementations that do not support deletion of user objects
+           should raise NotImplemented for this method."""
+        if hasattr(self, '_doDelUsers'):
+            return self._doDelUsers(names)
         raise NotImplemented
 
 
@@ -776,8 +806,8 @@
                 pw = u._getPassword()
                 if not self._isPasswordEncrypted(pw):
                     pw = self._encryptPassword(pw)
-                    self._doChangeUser(u.getUserName(), pw, u.getRoles(),
-                                       u.getDomains())
+                    self.manage_editUser(u.getUserName(), pw, u.getRoles(),
+                                         u.getDomains())
                     changed = changed + 1
             if REQUEST is not None:
                 if not changed:
@@ -847,7 +877,7 @@
                    action ='manage_main')
         if self.encrypt_passwords:
             password = self._encryptPassword(password)
-        self._doAddUser(name, password, roles, domains)
+        self.manage_addUser(name, password, roles, domains)
         if REQUEST: return self._mainUser(self, REQUEST)
 
 
@@ -887,7 +917,7 @@
                    action ='manage_main')
         if password is not None and self.encrypt_passwords:
             password = self._encryptPassword(password)
-        self._doChangeUser(name, password, roles, domains)
+        self.manage_editUser(name, password, roles, domains)
         if REQUEST: return self._mainUser(self, REQUEST)
 
     def _delUsers(self,names,REQUEST=None):
@@ -896,11 +926,14 @@
                    title  ='Illegal value', 
                    message='No users specified',
                    action ='manage_main')
-        self._doDelUsers(names)
+        self.manage_delUsers(names)
         if REQUEST: return self._mainUser(self, REQUEST)
 
     def manage_users(self,submit=None,REQUEST=None,RESPONSE=None):
-        """ """
+        """This method handles operations on users for the web based forms
+           of the ZMI. Use of this method by application code is deprecated.
+           Use the manage_addUser, manage_editUser and manage_delUsers APIs
+           instead."""
         if submit=='Add...':
             return self._add_User(self, REQUEST)
 
@@ -1012,18 +1045,20 @@
         """Return the named user object or None"""
         return self.data.get(name, None)
 
-    def _doAddUser(self, name, password, roles, domains):
-        """Create a new user"""
+    def manage_addUser(self, name, password, roles, domains):
+        """API method used to create a new user object."""
         self.data[name]=User(name,password,roles,domains)
 
-    def _doChangeUser(self, name, password, roles, domains):
+    def manage_editUser(self, name, password, roles, domains):
+        """API method used to change the attributes of a user."""
         user=self.data[name]
         if password is not None:
             user.__=password
         user.roles=roles
         user.domains=domains
 
-    def _doDelUsers(self, names):
+    def manage_delUsers(self, names):
+        """API method used to delete one or more user objects."""
         for name in names:
             del self.data[name]
 
@@ -1041,8 +1076,8 @@
             info = readUserAccessFile('inituser')
             if info:
                 name, password, domains, remote_user_mode = info
-                self._doDelUsers(self.getUserNames())
-                self._doAddUser(name, password, ('Manager',), domains)
+                self.manage_delUsers(self.getUserNames())
+                self.manage_addUser(name, password, ('Manager',), domains)
                 try:
                     os.remove(os.path.join(INSTANCE_HOME, 'inituser'))
                 except: