0 follower

Class Yiisoft\Rbac\Cycle\ItemTreeTraversal\ItemTreeTraversalFactory

InheritanceYiisoft\Rbac\Cycle\ItemTreeTraversal\ItemTreeTraversalFactory

A factory for creating item tree traversal strategy depending on used RDBMS.

Public Methods

Hide inherited methods

Method Description Defined By
getItemTreeTraversal() Creates item tree traversal strategy depending on used RDBMS. Yiisoft\Rbac\Cycle\ItemTreeTraversal\ItemTreeTraversalFactory

Method Details

Hide inherited methods

getItemTreeTraversal() public static method

Creates item tree traversal strategy depending on used RDBMS.

public static Yiisoft\Rbac\Cycle\ItemTreeTraversal\ItemTreeTraversalInterface getItemTreeTraversal ( \Cycle\Database\DatabaseInterface $database, string $tableName, string $childrenTableName, string $namesSeparator )
$database \Cycle\Database\DatabaseInterface

Cycle database instance.

$tableName string

A name of the table for storing RBAC items.

$childrenTableName string

A name of the table for storing relations between RBAC items.

$namesSeparator string

Separator used for joining item names.

return Yiisoft\Rbac\Cycle\ItemTreeTraversal\ItemTreeTraversalInterface

Item tree traversal strategy.

throws RuntimeException

When a database was configured with an unknown driver, either because it is not supported by Cycle out of the box or newly added by Cycle and not supported / tested yet in this package.

                public static function getItemTreeTraversal(
    DatabaseInterface $database,
    string $tableName,
    string $childrenTableName,
    string $namesSeparator,
): ItemTreeTraversalInterface {
    $arguments = [$database, $tableName, $childrenTableName, $namesSeparator];
    $driverType = $database->getDriver()->getType();
    // default - ignored due to the complexity of testing and preventing splitting of database argument.
    // @codeCoverageIgnoreStart
    return match ($driverType) {
        'SQLite' => new SqliteCteItemTreeTraversal(...$arguments),
        'MySQL' => self::getMysqlItemTreeTraversal($database, $tableName, $childrenTableName, $namesSeparator),
        'Postgres' => new PostgresCteItemTreeTraversal(...$arguments),
        'SQLServer' => new SqlServerCteItemTreeTraversal(...$arguments),
        default => throw new RuntimeException("$driverType database driver is not supported."),
    };
    // @codeCoverageIgnoreEnd
}