phpmv/ubiquity-acl

Ubiquity 框架的访问控制列表

安装: 982

依赖关系: 0

建议者: 0

安全性: 0

星标: 1

关注者: 2

分支: 0

开放问题: 0

类型: 扩展

0.0.15 2023-01-04 00:32 UTC

This package is auto-updated.

Last update: 2024-09-04 04:37:47 UTC


README

Scrutinizer Code Quality Build Status Code Intelligence Status Code Coverage

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 相关的表(RoleResourcePermissionAclElement)。这只需要做一次,并且在开发模式下。

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)
]);