YII管理後臺許可權分配關於整理舊程式碼

守護大白菜發表於2017-09-21

YII自帶的RBAC許可權角色分配就可以解決,,,其實就是控制路由來控制訪問許可權

但是在網站初期人員少的情況我們一般不用限制許可權,,等到專案做大了,,再分配許可權的時候發現有些選單是通過路由介面下的狀態區分的,,這就給許可權分配造成了困擾,我的解決辦法是做最小的改動,即通過狀態來定向不同的路由達到控制許可權的目的:

舉個例子:

舊程式碼:(多個型別的內容通過一個路由訪問,不能精確控制許可權)

class TestlistController extends BaseBackController
{
    /**
     * 首頁入口
     * @return string
     */
    public function actionIndex()
    {
        $login_id = Yii::$app->user->identity->id;
        $type = intval($_GET['type']);
        $data = $_GET;
        if(!$type){ //全部
            //處理業務邏輯
           
        }elseif($type == 1){ //關閉列表
            //處理業務邏輯
           
        }elseif($type == 2){ //今日列表
            //處理業務邏輯
           
        }

        return return $this->render('index');
    }
}   

修改後新程式碼:(修改後不同型別資料走不同的路由方便細化許可權)

class TestlistController extends BaseBackController
{
    /**
     * 首頁入口
     * @return string
     */
    public function actionIndex()
    {
        $login_id = Yii::$app->user->identity->id;
        $type = intval($_GET['type']);
        $data = $_GET;  //##修改後根據不同type走不同的路由,就可以控制許可權了
        if(!$type){ //全部
            return $this->redirect(array('testlist/index-all', 'data' => $data));
        }elseif($type == 1){ //關閉列表
            return $this->redirect(array('testlist/index-close', 'type'=>$type, 'data' => $data));
        }elseif($type == 2){ //今日列表
            return $this->redirect(array('testlist/index-cur', 'type' => $type, 'data' => $data));
        }

    }

    /**
     * 列表
     * @param $data
     * @return string
     */
    public function testlist($data){
        $showarr = [];
        $type = intval($data['type']);
        if(!$type){ //全部
            //處理業務邏輯
            
        }elseif($type == 1){ //關閉列表
            //處理業務邏輯
            
        }elseif($type == 2){ //今日列表
            //處理業務邏輯
            
        }
        return $this->render('index');
    }

    /**
     * 全部列表
     */
    public function actionIndexAll(){
        return self::testlist($_GET['data']);
    }
    /**
     * 今日列表
     * @return string
     */
    public function actionIndexCur(){
        return self::testlist($_GET['data']);
    }

    /**
     * 關閉的列表
     * @return mixed
     */
    public function actionIndexClose(){
        return self::testlist($_GET['data']);
    }
}

相關文章