1. Go to this page and download the library: Download yiisoft/rbac-cycle-db library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
yiisoft / rbac-cycle-db example snippets
use Cycle\Database\Config\DatabaseConfig;
use Cycle\Database\Config\Postgres\DsnConnectionConfig;
use Cycle\Database\Config\PostgresDriverConfig;
use Cycle\Database\DatabaseManager;
$dbConfig = new DatabaseConfig(
[
'default' => 'default',
'databases' => [
'default' => ['connection' => 'pgsql'],
],
'connections' => [
'pgsql' => new PostgresDriverConfig(new DsnConnectionConfig(
'pgsql:host=127.0.0.1;dbname=yiitest;port=5432',
'user',
'password',
)),
],
]
);
$databaseManager = new DatabaseManager($dbConfig);
$database = $databaseManager->database();
use Cycle\Database\DatabaseManager;
use Cycle\Migrations\Capsule;
use Cycle\Migrations\Config\MigrationConfig;
use Cycle\Migrations\FileRepository;
use Cycle\Migrations\Migrator;
$migrationsSubfolders = ['items', 'assignments'];
$directories = array_map(
static fn (): string => dirname(__DIR__. 2), "/vendor/yiisoft/rbac-cycle-db/migrations/$subfolder",
$migrationsSubfolders,
);
$config = new MigrationConfig([
'directory' => $directories[0],
// "vendorDirectories" are specified because the "directory" option doesn't support multiple directories. In the
// end, it makes no difference because they all will be merged into a single array.
'vendorDirectories' => $directories[1] ?? [],
'table' => 'cycle_migration',
'safe' => true,
]);
/** @var DatabaseManager $databaseManager */
$migrator = new Migrator($config, $databaseManager, new FileRepository($config));
$migrator->configure();
$capsule = new Capsule($databaseManager->database());
$migrationsSubfolders = ['assignments'];
use Cycle\Migrations\Capsule;
use Cycle\Migrations\Migrator;
/**
* @var Migrator $migrator
* @var Capsule $capsule
*/
while ($migrator->run($capsule) !== null) {
echo "Migration {$migration->getState()->getName()} applied successfully.\n";
}
use Cycle\Migrations\Capsule;
use Cycle\Migrations\Migrator;
/**
* @var Migrator $migrator
* @var Capsule $capsule
*/
while ($migrator->rollback($capsule) !== null) {
echo "Migration {$migration->getState()->getName()} reverted successfully.\n";
}
use Cycle\Database\DatabaseInterface;
use Yiisoft\Rbac\Cycle\AssignmentsStorage;
use Yiisoft\Rbac\Cycle\ItemsStorage;
use Yiisoft\Rbac\Cycle\TransactionalManagerDecorator;
use Yiisoft\Rbac\Manager;
use Yiisoft\Rbac\Permission;
use Yiisoft\Rbac\RuleFactoryInterface;
/** @var DatabaseInterface $database */
$itemsStorage = new ItemsStorage($database);
$assignmentsStorage = new AssignmentsStorage($database);
/** @var RuleFactoryInterface $rulesContainer */
$manager = new TransactionalManagerDecorator(
new Manager(
itemsStorage: $itemsStorage,
assignmentsStorage: $assignmentsStorage,
// Requires https://github.com/yiisoft/rbac-rules-container or another compatible factory.
ruleFactory: $rulesContainer,
),
);
$manager->addPermission(new Permission('posts.create'));
use Cycle\Migrations\Migration;
final class DeletePostUpdateItems extends Migration
{
private const TABLE_PREFIX = 'yii_rbac_';
private const ASSIGNMENTS_TABLE = self::TABLE_PREFIX . 'assignment';
public function up()
{
$this
->database()
->delete()
->from(self::ASSIGNMENTS_TABLE)
->where('item_name', 'IN', ['posts.redactor', 'posts.update']);
}
public function down()
{
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.