bearsunday/acl-resource

1.x-dev 2018-01-22 04:57 UTC

This package is auto-updated.

Last update: 2024-09-07 06:49:27 UTC


README

Scrutinizer Code Quality Code Coverage Build Status

BEAR.Sunday 的 ACL 内嵌资源模块

此模块将对应于 ACL 的应用程序资源内嵌到指定的页面资源中。与硬编码并内嵌应用程序资源的 @Embedded 注解不同,此模块基于配置内嵌资源。您可以更改资源树而无需更改源代码。

安装

Composer 安装

$ composer require bearsunday/acl-resource 1.x-dev

模块安装

use Ray\Di\AbstractModule;
use Ray\TestDouble\TestDoubleModule;
use Ray\RoleModule\RoleProviderInterface;

class DevRoleProvider implements RoleProviderInterface
{
    // provide role
    public function get()
    {
        return 'guest';
    }
}

class AppModule extends AbstractModule
{
    protected function configure()
    {
        // configure ACL
        $acl = new Acl();
        $roleGuest = new Role('guest');
        $acl->addRole($roleGuest);
        $acl->addRole(new Role('owner'), $roleGuest);
        $acl->addResource(new Resource('app://self/entries'));
        $acl->addResource(new Resource('app://self/users'));
        $acl->addResource(new Resource('app://self/comments'));
        $acl->allow('guest', ['app://self/entries', 'app://self/comments']);
        $acl->allow('admin', 'app://self/friends');
        // configure embedded resource list
        $resources = [
            'page://self//blog' => [
                 'app://self/entries',
                 'app://self/comments',
                 'app://self/friends'
             ],
            'page://self//admin/setting' => [
                'app://self/user{?id}',
                'app://self/freinds?user_id={id}'
            ]
        ];
        // define provider
        $roleProviderClass = DevRoleProvider::class;
        // install module        
        $this->install(new AclResourceModule($acl, $resources, $roleProviderClass));
    }
}
  • $acl 拥有 Zend\Permissions\Acl 指定的 ACL(访问控制列表)。使用 addResource 指定 $acl 可用的应用程序资源的所有 URI 路径,并使用 allow() / disallow() 方法指定可访问或不可访问的角色的应用程序资源。
  • $resources 是一个列表,其中包含了每个页面资源可以嵌入的应用程序资源。
  • $roleProviderClass 指定返回当前用户角色的类名(例如,从登录状态获取)。您需要实现 RoleProviderInterface

在上述示例中,当使用 guest 权限访问 /blog 页面时,请求对象 app://self/entriesapp://self/comments 被设置为 $body['entries']$body['comments']