codemix/hybridauthmanager

一个用于Yii的AuthManager,将层次结构存储在平面PHP文件中,并将分配存储在数据库中

dev-master 2013-08-22 19:12 UTC

This package is auto-updated.

Last update: 2024-08-24 03:56:39 UTC


README

一个用于Yii的AuthManager,将层次结构存储在平面PHP文件中,并将分配存储在数据库中。

这个类是CDbAuthManager和CPhpAuthManager的组合

  • 授权层次结构存储在平面PHP文件中
  • 授权分配存储在数据库中

如果授权层次结构几乎静态且不太复杂,这将非常有用。

您可以在data/auth.php中管理授权层次结构。为了不丢失注释,您应该避免调用任何创建认证项或添加子项的方法 - 即使它受支持。

安装

我们建议使用composer安装此扩展。将其添加到您的composer.json文件中的require部分

'codemix/hybridautmanager' : 'dev-master'

注意:目前还没有稳定的版本。

如果您还没有这样做,您还应该在composer的vendor目录中添加一个别名。

$vendor = realpath(__DIR__.'/../vendor');
return array(
    'alias' => array(
        'vendor' => realpath(__DIR__.'/../vendor'), // Fix this path
    ),
    ...

配置

将此配置添加到您的main.php

'components' => array(
    'authManager' => array(
        'class' => 'vendor.codemix.hybridautmanager.HybridAuthManager',
    ),
    ...
),

就像与CPhpAuthManager一样,您需要提供一个包含授权规则的文件。默认情况下,它在data/auth.php中。但在这里,您只需要提供授权层次结构

return array(
    // Admin == Root (Full permissions).
    'Admin' => array(
        'type'          => CAuthItem::TYPE_ROLE,
        'description'   => 'Administrator',
        'children'      => array(
            'manageUser',
            'managePosts',
        ),
    ),
    'manageUser' => array(
        'type' => CAuthItem::TYPE_TASK,
        'children' => array(
            'createUser',
            'updateUser',
            'deleteUser',
            'readUser',
        ),
    ),

    'createUser'    => array('type' => CAuthItem::TYPE_OPERATION),
    'updateUser'    => array('type' => CAuthItem::TYPE_OPERATION),
    'deleteUser'    => array('type' => CAuthItem::TYPE_OPERATION),
    'readUser'      => array('type' => CAuthItem::TYPE_OPERATION),

);

除非您将cacheID设置为null,否则此文件的内容将被缓存。

实际的角色分配将默认保存到数据库表auth_assignments中。您可以通过authManager组件的assignmentTable属性更改此名称。

缓存

组件可以缓存RBAC层次结构和授权分配。您可以在cacheID上配置缓存组件ID。

缓存层次结构

默认情况下,层次结构文件内容缓存3600秒。您可以通过hierarchyCachingDuration来配置此。

缓存授权分配

您可以在assignmentCachingDuration中设置缓存授权分配的秒数。分配将按用户进行缓存,以避免在每次请求时调用数据库。默认设置为0,这意味着分配仅在当前请求期间缓存,即在对checkAccess()的连续调用中。

将此属性设置为false以完全禁用缓存。