phpmv / ubiquity-acl
Ubiquity 框架的访问控制列表
0.0.15
2023-01-04 00:32 UTC
Requires
- php: >=8.0
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.0.0
- phpmv/ubiquity-dev: ^0.1
README
Ubiquity 框架的访问控制列表
示例
在运行时定义 ACL
逐个定义
AclManager::start(); AclManager::addRole('@USER'); AclManager::addResource('Home'); AclManager::addPermission('READ',1); AclManager::allow('@USER','Home','READ');
通过分组定义
AclManager::start(); AclManager::addAndAllow('@USER','Home','READ');
使用注解或属性定义 ACL
开始
use Ubiquity\security\acl\AclManager; use Ubiquity\security\acl\persistence\AclCacheProvider; AclManager::start(); AclManager::initFromProviders([ new AclCacheProvider() ]);
在控制器中定义 ACL
作为资源,授权给角色的控制器
使用注解
namespace controllers; /** * @resource('Main') * @allow('role'=>'@USER') */ class TestAclController extends ControllerBase { use AclControllerTrait; }
使用属性
namespace controllers; use Ubiquity\attributes\items\acl\Resource; use Ubiquity\attributes\items\acl\Allow; #[Resource('Main')] #[Allow(role: '@USER')] class TestAclController extends ControllerBase { use AclControllerTrait; }
覆盖
必须覆盖 _getRole 方法,使其返回活动用户的角色
namespace controllers; use Ubiquity\attributes\items\acl\Resource; use Ubiquity\attributes\items\acl\Allow;use Ubiquity\utils\http\USession; use Ubiquity\utils\http\USession; #[Resource('Main')] #[Allow(role: '@USER')] class TestAclController extends ControllerBase { use AclControllerTrait; public function _getRole(){ $activeUser=USession::get('activeUser'); if(isset($activeUser)){ return $activeUser->getRole(); } } }
使用数据库定义 ACL
数据库中定义的 ACL 是通过注解或属性定义的 ACL 的补充。
初始化
初始化允许创建与 ACL 相关的表(Role
、Resource
、Permission
、AclElement
)。这只需要做一次,并且在开发模式下。
use Ubiquity\controllers\Startup; use Ubiquity\security\acl\AclManager; $config=Startup::$config; AclManager::initializeDAOProvider($config, 'default');
开始
在 app/config/services.php
文件中
use Ubiquity\security\acl\AclManager; use Ubiquity\security\acl\persistence\AclCacheProvider; use Ubiquity\security\acl\persistence\AclDAOProvider; use Ubiquity\orm\DAO; DAO::start();//Optional, to use only if dbOffset is not default AclManager::start(); AclManager::initFromProviders([ new AclCacheProvider(), new AclDAOProvider($config) ]);