From: Andrey Kutejko Date: Sun, 1 Sep 2019 08:02:53 +0000 (+0200) Subject: extract auth queries X-Git-Url: https://git.andy128k.dev/?a=commitdiff_plain;h=c40c44e4eaf2e6486aa6c0c67267e8dd502494b9;p=ipf.git extract auth queries --- diff --git a/ipf/auth/models.php b/ipf/auth/models.php index 378ff8d..d3e8961 100644 --- a/ipf/auth/models.php +++ b/ipf/auth/models.php @@ -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);