sunnyphp / rbac-db
Yii RBAC 数据库存储
dev-master
2024-01-04 11:08 UTC
Requires
- php: ^8.0
- ext-pdo: *
- yiisoft/db: ^1
- yiisoft/rbac: ^1
Requires (Dev)
- ext-pdo_sqlite: *
- ext-uopz: *
- maglnet/composer-require-checker: ^4.3
- phpunit/phpunit: ^9.5
- rector/rector: ^0.18.0
- roave/infection-static-analysis-plugin: ^1.25
- slope-it/clock-mock: 0.4.0
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.2
- yiisoft/cache: ^3.0
- yiisoft/db-sqlite: ^1.0
Suggests
- yiisoft/db-mssql: For using with Microsoft SQL Server
- yiisoft/db-mysql: For using with MySQL
- yiisoft/db-oracle: For using with Oracle
- yiisoft/db-pgsql: For using with PosgtgreSQL
- yiisoft/db-sqlite: For using with SQLite
- yiisoft/yii-db-migration: For automating schema migration
This package is auto-updated.
Last update: 2024-09-04 12:29:50 UTC
README
Yii RBAC 数据库
本包为 Yii 数据库 提供了 Yii RBAC 的存储功能。
要求
- PHP 8.0 或更高版本。
PDO
PHP 扩展。- 以下任一驱动程序
- SQLite (最小要求版本为 3.8.3)
- MySQL
- PostgreSQL
- Microsoft SQL Server
- Oracle
- 所选驱动程序的
PDO
PHP 扩展。
安装
可以使用 composer 安装此包
composer require yiisoft/rbac-db
通用用法
配置数据库连接
配置取决于所选的驱动程序。以下是一个 PostgreSQL 的示例
use Yiisoft\Cache\ArrayCache; // Requires https://github.com/yiisoft/cache use Yiisoft\Db\Cache\SchemaCache; use Yiisoft\Db\Pgsql\Connection; use Yiisoft\Db\Pgsql\Driver; $pdoDriver = new Driver('pgsql:host=127.0.0.1;dbname=yiitest;port=5432', 'user', 'password'); $pdoDriver->charset('UTF8'); $connection = Connection( $pdoDriver, new SchemaCache( new ArrayCache(), // Any other PSR-16 compatible cache can be used. ) );
更多详细示例可以在 Yii 数据库文档 中找到。
处理架构
为了减少依赖项,本包不提供任何用于处理架构的 CLI。有多种选择可供选择
- 使用迁移工具,如 Yii DB Migration。迁移作为纯 SQL 代码在
sql/migrations
文件夹中导出。 - 如果没有迁移,可以使用
DbSchemaManager
类。包含该类的 CLI 命令示例可以在 此处 找到。 - 使用在安装
rbac-db
包时的实际纯 SQL(位于sql
文件夹的根目录)。
纯 SQL 文件的结构
pgsql-up.sql
- 对 PostgreSQL 驱动程序应用更改。pgsql-down.sql
- 对 PostgreSQL 驱动程序撤销更改。
纯 SQL 假设使用所有 3 个表的默认名称(使用 yii_rbac_
前缀)
yii_rbac_item
.yii_rbac_assignment
.yii_rbac_item_child
.
DbSchemaManager
允许自定义表名
use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Rbac\Db\DbSchemaManager; /** @var ConnectionInterface $database */ $schemaManager = new DbSchemaManager( database: $database, itemsTable: 'custom_items', assignmentsTable: 'custom_assignments', itemsChildrenTable: 'custom_items_children', ); $schemaManager->ensureTables(); $schemaManager->ensureNoTables(); // Note: All existing data will be erased.
使用存储
存储不应直接使用。相反,应使用它们与 Yii RBAC 包中的 Manager
一起使用
use Yiisoft\Db\Connection\ConnectionInterface; use Yiisoft\Rbac\Db\AssignmentsStorage; use Yiisoft\Rbac\Db\ItemsStorage; use Yiisoft\Rbac\Db\TransactionalManagerDecorator; use Yiisoft\Rbac\Manager; use Yiisoft\Rbac\Permission; use Yiisoft\Rbac\RuleFactoryInterface; /** @var ConnectionInterface $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 other compatible factory. ruleFactory: $rulesContainer, ), ); $manager->addPermission(new Permission('posts.create'));
注意将管理器用装饰器包装 - 这会额外提供数据库事务以确保数据完整性。
注意,不需要使用两个 DB 存储空间。组合不同的实现是可能的。一个相当常见的用例是通过 PHP 文件 管理项,同时将分配存储在数据库中。
更多示例可以在 Yii RBAC 文档中找到。
测试
单元测试
本包使用 PHPUnit 进行测试。要运行测试
./vendor/bin/phpunit
突变测试
本包测试使用 Infection 突变框架进行检查。要运行它
./vendor/bin/infection
静态分析
使用 Psalm 对代码进行静态分析。要运行静态分析
./vendor/bin/psalm