ThinkPHP學習劄記(十九)許可權管理的實現方式RBAC

來源:互聯網
上載者:User
ThinkPHP學習筆記(十九)許可權管理的實現方式RBAC


Action的方法



下面上一下五張表的資料

tb_user:使用者表

Role許可權組表

role_user:許可權組與使用者的對應關係表

node表:表示當前項目中url分類,精確到每個方法的控制

access表:表示不同使用者組對應的可以訪問的不同url分類

config中需要設定的參數:

//設定rbac的參數'USER_AUTH_ON'=>true,'USER_AUTH_TYPE'=>1,// 預設認證類型 1 登入認證 2 即使認證'USER_AUTH_KEY'=>'authId',// 使用者認證SESSION標記    'ADMIN_AUTH_KEY'=>'administrator',//管理員標識'USER_AUTH_MODEL'=>'User',// 預設驗證資料表模型'AUTH_PWD_ENCODER'=>'md5',// 使用者認證密碼加密方式'USER_AUTH_GATEWAY'=>'/Public/login',// 預設認證網關'NOT_AUTH_MODULE'=>'Public',// 預設無需認證模組'REQUIRE_AUTH_MODULE'=>'',// 預設需要認證模組'NOT_AUTH_ACTION'=>'',// 預設無需認證操作'REQUIRE_AUTH_ACTION'=>'',// 預設需要認證操作    'GUEST_AUTH_ON'          => false,    // 是否開啟遊客授權訪問    'GUEST_AUTH_ID'           =>    0,     // 遊客的使用者ID(可以在資料庫組中設定一個id為0的遊客組)'SHOW_RUN_TIME'=>true,// 已耗用時間顯示'SHOW_ADV_TIME'=>true,// 顯示詳細的已耗用時間'SHOW_DB_TIMES'=>true,// 顯示資料庫查詢和寫入次數'SHOW_CACHE_TIMES'=>true,// 顯示快取作業次數'SHOW_USE_MEM'=>true,// 顯示記憶體開銷    'DB_LIKE_FIELDS'=>'title|remark','RBAC_ROLE_TABLE'=>'think_role','RBAC_USER_TABLE'=>'think_role_user','RBAC_ACCESS_TABLE' =>'think_access','RBAC_NODE_TABLE'=> 'think_node',

PublicAction中需要設定的公用存取方法;(命名基於配置中的NOT_AUTH_MODULE的配置)

login();    }    public function login(){    $this->display();    }    //可以去例子中複製    public function checkLogin(){if(empty($_POST['username'])) {$this->error('帳號錯誤!');}elseif (empty($_POST['password'])){$this->error('密碼必須!');//}elseif (empty($_POST['verify'])){//$this->error('驗證碼必須!');}        //產生認證條件        $map            =   array();// 支援使用綁定帳號登入$map['username']= $_POST['username'];//        $map["status"]=array('gt',0);//if($_SESSION['verify'] != md5($_POST['verify'])) {//$this->error('驗證碼錯誤!');//}import ( 'ORG.Util.RBAC' );        $authInfo = RBAC::authenticate($map);        //使用使用者名稱、密碼和狀態的方式進行認證        if(false === $authInfo) {            $this->error('帳號不存在或已禁用!');        }else {            if($authInfo['password'] != md5($_POST['password'])) {            $this->error('密碼錯誤!');            }            $_SESSION[C('USER_AUTH_KEY')]=$authInfo['id'];//            $_SESSION['email']=$authInfo['email'];//            $_SESSION['loginUserName']=$authInfo['nickname'];//            $_SESSION['lastLoginTime']=$authInfo['last_login_time'];//$_SESSION['login_count']=$authInfo['login_count'];            if($authInfo['username']=='admin') {            $_SESSION['administrator']=true;            }            //儲存登入資訊//$User=M('User');//$ip=get_client_ip();//$time=time();//            $data = array();//$data['id']=$authInfo['id'];//$data['last_login_time']=$time;//$data['login_count']=array('exp','login_count+1');//$data['last_login_ip']=$ip;//$User->save($data);// 緩衝存取權限            RBAC::saveAccessList();$this->success('登入成功!');}    }    //可以去例子中複製    public function loginout(){        if(isset($_SESSION[C('USER_AUTH_KEY')])) {unset($_SESSION[C('USER_AUTH_KEY')]);unset($_SESSION);session_destroy();            $this->assign("jumpUrl",__URL__.'/login/');            $this->success('登出成功!');        }else {            $this->error('已經登出!');        }    }}?>

CommonAction中設定所有url的過濾方法

assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) );}// 提示錯誤資訊$this->error ( L ( '_VALID_ACCESS_' ) );}}}}public function verify(){//匯入驗證碼類//方式一:import('ORG.Util.Image');//方式二:@代表當前項目的lib檔案夾(需要自己複製或者自己寫一個新的類)//import('@.ORG.Image')//Image::buildImageVerify();//擴充修改 /** * @param string $length  位元 * @param string $mode  類型(0字母,1數字,2大寫字母,3小寫字母,4中文,5混合) * @param string $type 映像格式 * @param string $width  寬度 * @param string $height  高度 * buildImageVerify($length=4,$mode=1,$type='png',$width=48,$height=22,$verifyName='verify') */Image::buildImageVerify(5,5,'png',80,22);//中文驗證碼(2.0會有一個問題:msubstr有錯誤)//1.修改function::msubstr//2.加入字型ttf需要放入image同級目錄之下//擴充可以去類檔案中查看//Image::GBVerify();}}?>

Public檔案夾下的login。html

Insert title here


  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.