AdminController.php 10.5 KB
<?php
namespace backend\controllers;

use Yii;
use backend\models\Admin;
use backend\components\Pagination;

/**
 * Ajax controller
 */
class AdminController extends BaseController
{
    
    protected $authManager;
    
    public function beforeAction($action) {
        $this->authManager = Yii::$app->authManager;
        
        return parent::beforeAction($action);
    }

    /**
     * 后台用户列表
     */
    public function actionList()
    {
        if (Yii::$app->request->isPost){
            $posts = Yii::$app->request->post();
            $model = new Admin;
            $model->username = $posts['username'];
            $model->email = $posts['email'];
            $model->setPassword($posts['password']);
            $model->generateAuthKey();
            $model->generatePasswordResetToken();
            //用户加入后默认启用状态
            $model->status = Admin::STATUS_ACTIVE;
            
            if ($model->save()){
                if (($roleName = Yii::$app->request->post('role')) && ($role = $this->authManager->getRole($roleName))){
                    if (!$this->authManager->assign($role,$model->getId())){
                        Yii::$app->session->setFlash('error', '分配用户组失败。');
                    }
                }
                Yii::$app->session->setFlash('success', '加入成功。');
            }else{
                //Yii::$app->session->setFlash('error', '加入失败。');
                Yii::$app->session->setFlash('warning', current($model->getFirstErrors()));
            }
        }
        
        $list = Admin::find()->all();
        
        //所有权限
        $roles = Admin::getRolesIndex();
        $roles = [''=>'选择用户组']+$roles;
        
        return $this->render('list',[
            'roles'=>$roles,
            'list'=>$list,
        ]);
    }
    
    /**
     * 用户组(角色)列表
     */
    public function actionRole()
    {
        if (Yii::$app->request->isPost){
            $name = Yii::$app->request->post('name');
            $role = $this->authManager->createRole($name);
            $role->description = Yii::$app->request->post('description') ? : ucwords($name);
            if ($this->authManager->add($role)){
                Yii::$app->session->setFlash('success', '添加成功。');
            }else{
                Yii::$app->session->setFlash('error', '添加失败。');
            }
        }
        
        $list = $this->authManager->getRoles();
        
        return $this->render('role',[
            'list'=>$list,
        ]);
    }
    
    /**
     * 权限列表
     */
    public function actionPermission()
    {
        if (Yii::$app->request->isPost){
            $name = Yii::$app->request->post('name');
            $permission = $this->authManager->createPermission($name);
            $permission->description = Yii::$app->request->post('description') ? : ucwords(strtr($name,array('/'=>' ')));
            if ($this->authManager->add($permission)){
                Yii::$app->session->setFlash('success', '添加成功。');
            }else{
                Yii::$app->session->setFlash('error', '添加失败。');
            }
        }
        
        $list = $this->authManager->getPermissions();
        
        return $this->render('permission',[
            'list'=>$list,
        ]);
    }
    
    /**
     * 操作
     * @return type
     */
    public function actionOperate()
    {
        if (!$target = Yii::$app->getRequest()->get('target')){
            return $this->redirect($this->_refer);
        }
        if (!$type = Yii::$app->getRequest()->get('type')){
            return $this->redirect($this->_refer);
        }
        
        $authManager = $this->authManager;
        switch (true){
            case $target == 'user' && $type == 'disable':
                $r = Admin::findOne(Yii::$app->getRequest()->getQueryParam('id'))->updateAttributes(['status'=>Admin::STATUS_DELETED]);
                break;
            case $target == 'user' && $type == 'enable':
                $r = Admin::findOne(Yii::$app->getRequest()->getQueryParam('id'))->updateAttributes(['status'=>Admin::STATUS_ACTIVE]);
                break;
            case $target == 'user' && $type == 'del':
                $r = Admin::findOne(Yii::$app->getRequest()->getQueryParam('id'))->delete();
                break;
            case $target == 'role' && $type == 'del':
                $r = $authManager->remove($authManager->getRole(Yii::$app->getRequest()->get('name')));
                break;
            case $target == 'permission' && $type == 'del':
                $r = $authManager->remove($authManager->getPermission(Yii::$app->getRequest()->get('name')));
                break;
            default:
                break;
        }
        if (!empty($r)){
            Yii::$app->session->setFlash('success', '操作成功');
        }else{
            Yii::$app->session->setFlash('error', '操作失败');
        }

        return $this->redirect($this->_refer);
    }
    
    /**
     * 用户组配置
     * @return type
     */
    public function actionAssignrole()
    {
        if (!$user_id = Yii::$app->getRequest()->getQueryParam('id')){
            return $this->redirect($this->_refer);
        }
        if (!$user = Admin::findOne($user_id)){
            return $this->redirect($this->_refer);
        }
        
        $auth = $this->authManager;
        $allRoles = $auth->getRoles();
        
        if (Yii::$app->request->isPost){
            $roles = Yii::$app->request->post('roles',[]);
            $auth->revokeAll($user_id);
            foreach ($roles as $roleName){
                if (empty($allRoles[$roleName])){
                    continue;
                }
                $role = $allRoles[$roleName];
                $auth->assign($role,$user_id);
            }
        }
        
        $userRoles = $auth->getRolesByUser($user->getId());
        //var_dump($allRoles,$userRoles);
        
        return $this->render('assignrole',[
            'user'=>$user,
            'allRoles'=>$allRoles,
            'userRoles'=>$userRoles,
        ]);
    }
    
    /**
     * 权限配置
     * @return type
     */
    public function actionAssignpermission()
    {
        if (!$name = Yii::$app->getRequest()->get('name')){
            return $this->redirect($this->_refer);
        }
        
        $auth = $this->authManager;
        $role = $auth->getRole($name);
        $allPermissions = $auth->getPermissions();
        
        if (Yii::$app->request->isPost){
            $permissions = Yii::$app->request->post('permissions',[]);
            $auth->removeChildren($role);
            foreach ($permissions as $permissionName){
                if (empty($allPermissions[$permissionName])){
                    continue;
                }
                $permission = $allPermissions[$permissionName];
                $auth->addChild($role,$permission);
            }
        }
        
        $rolePermissions = $auth->getPermissionsByRole($name);
        //var_dump($allPermissions,$rolePermissions);
        
        return $this->render('assignpermission',[
            'role'=>$role,
            'allPermissions'=>$allPermissions,
            'rolePermissions'=>$rolePermissions,
        ]);
    }
    
    /**
     * 编辑用户
     * @return type
     */
    public function actionAdminedit()
    {
        if (!$id = Yii::$app->getRequest()->getQueryParam('id')){
            return $this->redirect($this->_refer);
        }

        $model = Admin::findOne($id);
        if (!$model){
            Yii::$app->session->setFlash('error', '找不到该用户');
            return $this->redirect($this->_refer);
        }

        if(Yii::$app->request->isPost){
            $posts = Yii::$app->request->post();
            $model->username = $posts['username'];
            $model->email = $posts['email'];
            if (!empty($posts['password'])){
                $model->setPassword($posts['password']);
                $model->generateAuthKey();
                $model->generatePasswordResetToken();
            }

            if($model->save()){
                if (!empty($posts['password'])){
                    Yii::$app->session->setFlash('success', '密码修改成功。');
                }
                Yii::$app->session->setFlash('success', '编辑成功。');
            }else{
                Yii::$app->session->setFlash('warning', current($model->getFirstErrors()));
            }
            return $this->refresh();
        }

        return $this->render('adminedit',[
            'model'=>$model,
        ]);
    }
    
    /**
     * 编辑用户组
     * @return type
     */
    public function actionRoleedit()
    {
        if (!$name = Yii::$app->getRequest()->get('name')){
            return $this->redirect($this->_refer);
        }

        $model = $this->authManager->getRole($name);
        if (!$model){
            Yii::$app->session->setFlash('error', '找不到该用户组');
            return $this->redirect($this->_refer);
        }

        if(Yii::$app->request->isPost){
            $posts = Yii::$app->request->post();
            $model->name = $posts['name'];
            $model->description = $posts['description'];

            if($this->authManager->update($name,$model)){
                Yii::$app->session->setFlash('success', '编辑成功。');
            }else{
                Yii::$app->session->setFlash('warning', current($model->getFirstErrors()));
            }
            return $this->refresh();
        }

        return $this->render('roleedit',[
            'model'=>$model,
        ]);
    }
    
    /**
     * 编辑菜单权限
     * @return type
     */
    public function actionPermissionedit()
    {
        if (!$name = Yii::$app->getRequest()->get('name')){
            return $this->redirect($this->_refer);
        }

        $model = $this->authManager->getPermission($name);
        if (!$model){
            Yii::$app->session->setFlash('error', '找不到该用户组');
            return $this->redirect($this->_refer);
        }

        if(Yii::$app->request->isPost){
            $posts = Yii::$app->request->post();
            $model->name = $posts['name'];
            $model->description = $posts['description'];

            if($this->authManager->update($name,$model)){
                Yii::$app->session->setFlash('success', '编辑成功。');
            }else{
                Yii::$app->session->setFlash('warning', current($model->getFirstErrors()));
            }
            return $this->refresh();
        }

        return $this->render('permissionedit',[
            'model'=>$model,
        ]);
    }
}