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;
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()
);
}
+ 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)
);
}
+ 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);