diff rhodecode/model/user.py @ 1749:8ecc6b8229a5 beta

commit less models - models don't do any commits(with few exceptions) - all db transactions should be handled by higher level modules like controllers, celery tasks
author Marcin Kuzminski <marcin@python-works.com>
date Fri, 02 Dec 2011 22:31:13 +0200
parents 48d4fcf04a29
children a87aa385f21c
line wrap: on
line diff
--- a/rhodecode/model/user.py	Fri Dec 02 00:15:26 2011 +0200
+++ b/rhodecode/model/user.py	Fri Dec 02 22:31:13 2011 +0200
@@ -54,6 +54,9 @@
 
 class UserModel(BaseModel):
 
+    def __get_user(self, user):
+        return self._get_instance(User, user)
+
     def get(self, user_id, cache=False):
         user = self.sa.query(User)
         if cache:
@@ -84,11 +87,9 @@
 
             new_user.api_key = generate_api_key(form_data['username'])
             self.sa.add(new_user)
-            self.sa.commit()
             return new_user
         except:
             log.error(traceback.format_exc())
-            self.sa.rollback()
             raise
 
 
@@ -159,7 +160,6 @@
                 new_user.lastname = attrs['lastname']
 
                 self.sa.add(new_user)
-                self.sa.commit()
                 return new_user
             except (DatabaseError,):
                 log.error(traceback.format_exc())
@@ -200,7 +200,6 @@
                 new_user.lastname = attrs['lastname']
 
                 self.sa.add(new_user)
-                self.sa.commit()
                 return new_user
             except (DatabaseError,):
                 log.error(traceback.format_exc())
@@ -258,10 +257,8 @@
                     setattr(user, k, v)
 
             self.sa.add(user)
-            self.sa.commit()
         except:
             log.error(traceback.format_exc())
-            self.sa.rollback()
             raise
 
     def update_my_account(self, user_id, form_data):
@@ -280,10 +277,8 @@
                         setattr(user, k, v)
 
             self.sa.add(user)
-            self.sa.commit()
         except:
             log.error(traceback.format_exc())
-            self.sa.rollback()
             raise
 
     def delete(self, user_id):
@@ -300,10 +295,8 @@
                                                'remove those repositories') \
                                                % user.repositories)
             self.sa.delete(user)
-            self.sa.commit()
         except:
             log.error(traceback.format_exc())
-            self.sa.rollback()
             raise
 
     def reset_password_link(self, data):
@@ -477,3 +470,35 @@
 
         return user
 
+
+
+    def has_perm(self, user, perm):
+        if not isinstance(perm, Permission):
+            raise Exception('perm needs to be an instance of Permission class')
+
+        user = self.__get_user(user)
+
+        return UserToPerm.query().filter(UserToPerm.user == user.user)\
+            .filter(UserToPerm.permission == perm).scalar() is not None
+
+    def grant_perm(self, user, perm):
+        if not isinstance(perm, Permission):
+            raise Exception('perm needs to be an instance of Permission class')
+
+        user = self.__get_user(user)
+
+        new = UserToPerm()
+        new.user = user.user
+        new.permission = perm
+        self.sa.add(new)
+
+
+    def revoke_perm(self, user, perm):
+        if not isinstance(perm, Permission):
+            raise Exception('perm needs to be an instance of Permission class')
+        
+        user = self.__get_user(user)
+        
+        obj = UserToPerm.query().filter(UserToPerm.user == user.user)\
+                .filter(UserToPerm.permission == perm).one()
+        self.sa.delete(obj)