DeleteRule.php 1.43 KB
<?php

    namespace common\components\rules;

    use yii\db\Query;
    use yii\rbac\Rule;

    class DeleteRule extends Rule
    {
        public $name = 'canDelete';

        public function execute ($user, $item, $params)
        {
            $auth = \Yii::$app->authManager;
            $access = false;
            if($params['record']) {
                $roles = \Yii::$app->user->identity->getRoles();
                $permissions = [];
                $queryRole = (new Query())->from('auth_table_access_group')->where(['in', 'role', $roles])->andWhere(['record_id' => $params['record']->primaryKey])->all();
                $queryUser = (new Query())->from('auth_table_access_user')->where(['user_id' => $user])->andWhere(['record_id' => $params['record']->primaryKey])->all();
                foreach($queryRole as $oneRole)
                {
                    $permissions[] = $oneRole['permission'];
                    $permissions = array_merge($permissions, array_keys($auth->getPermissionsByRole($oneRole['permission'])));
                }
                foreach($queryUser as $oneUser)
                {
                    $permissions[] = $oneUser['permission'];
                    $permissions = array_merge($permissions, array_keys($auth->getPermissionsByRole($oneUser['permission'])));
                }
                $access = in_array($item->name, array_unique($permissions));
            }
            return $access;
        }

    }