daydiff/yii2-auth-chain

Yii2 授权链

v1.0.0 2016-07-28 06:21 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:26:20 UTC


README

Latest Version on Packagist Software License Build Status

这是用来做什么的?

用于具有分层访问角色系统的应用程序。

有示例吗?不是很清楚

您有一个应用程序 - API。这里有两个角色

  • admin - 他们可以查看统计数据和编辑客户;
  • client - 他们可以看到自己的统计数据并设置设置。

您需要允许管理员在不了解密码的情况下,仅通过管理员界面作为客户进行授权。您还需要允许管理员在不重新登录的情况下返回自己的权限/账户。当然,您还需要正确记录管理员作为客户所做的所有更改,这样您总是知道谁实际上做出了某些更改。

安装

$ composer require daydiff/yii2-auth-chain

使用

注册应用程序组件

'components' => [
    'authChain' => [
        'class' => 'Daydiff\AuthChain\Service'
    ],
]

您需要声明一个实现 \Daydiff\AuthChain\MemberInterface 的成员类

//Member.php
namespace app\foo\bar;

class Member implements \Daydiff\AuthChain\MemberInterface
{
    private $id;
    private $login;

    /**
     * @inheritdoc
     */
    function getId()
    {
        return $this->id;
    }

    /**
     * @inheritdoc
     */
    function getLogin()
    {
        return $this->login;
    }

    /**
     * @inheritdoc
     */
    function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    /**
     * @inheritdoc
     */
    function setLogin($login)
    {
        $this->login = $login;
        return $this;
    }
}

在您用于作为客户进行授权的动作中

public function actionAuthAs($id)
{
    $user = \Yii::$app->getIdentity()->getUser();
    $member = new app\foo\bar\Member();
    $member->setId($user->id)
        ->setLogin($user->login);
    \Yii::$app->authChain->push($member);

    //and then you do authorization work
}

当您需要知道用户实际是谁时

$member = \Yii::$app->authChain->last();
$realUserId = $member->getId();