]> git.andy128k.dev Git - ipf.git/commitdiff
extract auth queries
authorAndrey Kutejko <andy128k@gmail.com>
Sun, 1 Sep 2019 08:02:53 +0000 (10:02 +0200)
committerAndrey Kutejko <andy128k@gmail.com>
Sun, 8 Sep 2019 13:40:59 +0000 (15:40 +0200)
ipf/auth/models.php

index 378ff8d767bd04dc9a7d1cc70bf27a304dd5ad65..d3e8961f484783c1ec14d3b893aeb2b2ce948749 100644 (file)
@@ -2,6 +2,39 @@
 
 namespace IPF\Auth;
 
+class Query
+{
+    public static function userPermissions(\Doctrine\DBAL\Connection $connection, $user_id)
+    {
+        return $connection->fetchAll('SELECT auth_permission.* FROM auth_permission ' .
+            ' INNER JOIN auth_user_permission ON permission_id = id ' .
+            ' WHERE user_id = ? ' .
+            ' ORDER BY name',
+            [$user_id]
+        );
+    }
+
+    public static function userRoles(\Doctrine\DBAL\Connection $connection, $user_id)
+    {
+        return $connection->fetchAll('SELECT auth_role.* FROM auth_role ' .
+            ' INNER JOIN auth_user_role ON role_id = id ' .
+            ' WHERE user_id = ? ' .
+            ' ORDER BY name',
+            [$user_id]
+        );
+    }
+
+    public static function rolePermissions(\Doctrine\DBAL\Connection $connection, $role_id)
+    {
+        return $connection->fetchAll('SELECT auth_permission.* FROM auth_permission ' .
+            ' INNER JOIN auth_role_permission ON permission_id = id ' .
+            ' WHERE role_id = ? ' .
+            ' ORDER BY name',
+            [$role_id]
+        );
+    }
+}
+
 abstract class DBObject
 {
     public $id;
@@ -103,22 +136,16 @@ class User extends DBObject
 
     public function permissions()
     {
-        return Permission::queryAll('SELECT auth_permission.* FROM auth_permission ' .
-            ' INNER JOIN auth_user_permission ON permission_id = id ' .
-            ' WHERE user_id = ? ' .
-            ' ORDER BY name',
-            [$this->id]
-        );
+        $connection = \PFF\Container::db();
+        $permissions = Query::userPermissions($connection, $this->id);
+        return array_map(function ($a) { return Permission::fromArray($a); }, $permissions);
     }
 
     public function roles()
     {
-        return Role::queryAll('SELECT auth_role.* FROM auth_role ' .
-            ' INNER JOIN auth_user_role ON role_id = id ' .
-            ' WHERE user_id = ? ' .
-            ' ORDER BY name',
-            [$this->id]
-        );
+        $connection = \PFF\Container::db();
+        $roles = Query::userRoles($connection, $this->id);
+        return array_map(function ($a) { return Role::fromArray($a); }, $roles);
     }
 
     public function effectivePermissions()
@@ -208,14 +235,19 @@ class Role extends DBObject
         );
     }
 
+    public static function fromArray($assoc)
+    {
+        $r = new Role();
+        $r->id = $assoc['id'];
+        $r->name = $assoc['name'];
+        return $r;
+    }
+
     public function permissions()
     {
-        return Permission::queryAll('SELECT auth_permission.* FROM auth_permission ' .
-            ' INNER JOIN auth_role_permission ON permission_id = id ' .
-            ' WHERE role_id = ? ' .
-            ' ORDER BY name',
-            [$this->id]
-        );
+        $connection = \PFF\Container::db();
+        $permissions = Query::rolePermissions($connection, $this->id);
+        return array_map(function ($a) { return Permission::fromArray($a); }, $permissions);
     }
 
     public function join($user)
@@ -261,6 +293,14 @@ class Permission extends DBObject
         );
     }
 
+    public static function fromArray($assoc)
+    {
+        $p = new Permission();
+        $p->id = $assoc['id'];
+        $p->name = $assoc['name'];
+        return $p;
+    }
+
     public function grant($obj)
     {
         list($table, $data) = self::link($obj);