亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

thinkPHP框架RBAC實現(xiàn)原理分析

 更新時間:2019年02月01日 10:06:40   作者:trouble-i-am-in  
這篇文章主要介紹了thinkPHP框架RBAC實現(xiàn)原理,結(jié)合實例形式分析了thinkPHP框架中RBAC角色權(quán)限控制相關(guān)實現(xiàn)原理與操作技巧,需要的朋友可以參考下

本文實例講述了thinkPHP框架RBAC實現(xiàn)原理。分享給大家供大家參考,具體如下:

RBAC就是:Role Based Access Controller,基于角色(role)的權(quán)限(Access)管理,這里簡單介紹一下他的原理與實現(xiàn)方式之一。

Part 1 數(shù)據(jù)庫設(shè)計

首先最基本的組成有:用戶(admin),角色(role),具體權(quán)限(auth),這三者之間的關(guān)系是這樣的:一個用戶只擁有一種角色,一種角色下?lián)碛卸鄠€權(quán)限,一個權(quán)限也會同時被多個角色擁有,也就是說admin表和role表是一對一關(guān)系,role和auth表是多對多關(guān)系,本來符合范式設(shè)計要求的情況應(yīng)該是需要一張關(guān)聯(lián)表的,但是這里為了簡單,就只把role擁有的auth寫成一個字段auth_id_lst。所以具體的表設(shè)計就是:

admin

  • admin_id
  • admin_name
  • role_id (foreign_key)

role

  • role_id
  • role_name
  • auth_id_lst

auth

  • auth_id
  • auth_name
  • auth_pid

為了更直接的理解,這里放幾個每張表的具體記錄:

auth

auth_id auth_name auth_pid
1 供應(yīng)商管理 0
2 供應(yīng)商添加 1
3 供應(yīng)商修改 1
4 商品管理 0
5 商品下架 4
6 顧客管理 0

role

role_id role_name auth_id_lst
1 物流部門經(jīng)理 1,2,3
2 銷售部門經(jīng)理 4,5
3 公關(guān)部門經(jīng)理 6

admin

admin_id admin_name role_id
1 張三 1
2 李四 2
3 王五 3

這樣就可以保存住具體的用戶所擁有的具體權(quán)限了,而其中為了能更好的管理具體auth,同時也為了更好的理解,所以加入了role表進行補充,如果做一個類似的話,更像下面的形式:

  • admin:具體人員
  • role:部門
  • auth:具體所需要的權(quán)限

同一個部門的人,所需要的權(quán)限基本是相同的,所以可以使用一個role進行統(tǒng)一管理。

Part 2 代碼實現(xiàn)

上面只是簡單做一個介紹,這一部分開始將介紹具體的實施方案,來自于一個帶我的大哥。看懂下面的部分你需要具備的知識點有:

  • thinkphp的基礎(chǔ)知識
  • session的用法

這個使用的場景是一個后臺管理系統(tǒng),針對不同role開放不同的Controller(控制器)和Action(方法),所以auth表具體結(jié)構(gòu)如下:

admin

  • auth_id
  • auth_name
  • auth_c 保存控制器名
  • auth_a 保存方法名
  • auth_pid 權(quán)限之間存在分類情況,使用該字段進行保存

接下來就是具體的操作步驟了:

1.1 新建Controller類

在thinkphp中每個Controller都會繼承一個thinkphp下的Think\Controller,這個時候可以新建一個Controller,之后讓所有的Controller都繼承這個新建的類,這樣所有進行的操作都要先經(jīng)過這個新建控制器的篩選。

下面是這個新建類的部分內(nèi)容:

<?php
namespace Admin\Controller;
use Think\Controller;
class FatherController extends Controller{
  // 構(gòu)造函數(shù)
  public function __construct(){
    // 實例化父類構(gòu)造函數(shù)
    parent::__construct();
    // session('admin_id')會在后面的驗證成功后被保存
    // session()中的?表示判斷
    fi(!session('?admin_id')){
      $this->error('必須登錄后才可以執(zhí)行操作',U('Back/login'));
    }
    // 后面還有內(nèi)容,這里先到這里
  }
}
?>

1.2 跳轉(zhuǎn)到登錄頁面

1.1中跳轉(zhuǎn)到一個登錄的頁面,在這個登錄頁面中輸入用戶名、密碼、驗證碼之后,就可以調(diào)用專門Model類來進行驗證了。這里就細講了,這里講解一下具體步驟:

  • 在BackController的login方法中實例化AdminModel類
  • 在AdminModel類中設(shè)置自動驗證和自動完成,保證用戶名和密碼都經(jīng)過驗證
  • 如果用戶名和密碼都正確,則將admin_id保存在session中,并從role表中讀取該用戶的role,與auth_id_lst,同樣保存在session中。這里做一下總結(jié):

session('admin_id') 登錄者的id

session('user_name') 登錄者注冊名

session('auth') 登錄者所擁有的role中的auth_id_lst中對應(yīng)auth表的具體值,格式為 Controller/Action
session('menu') 登錄者所能操作的具體的權(quán)限信息

1.3 回到最初新建的Controller類

<?php
namespace Admin\Controller;
use Think\Controller;
class FatherController extends Controller{
  // 構(gòu)造函數(shù)
  public function __construct(){
    // 實例化父類構(gòu)造函數(shù)
    parent::__construct();
    // session('admin_id')會在后面的驗證成功后被保存
    // session()中的?表示判斷
    fi(!session('?admin_id')){
      $this->error('必須登錄后才可以執(zhí)行操作',U('Back/login'));
    }
    // 這里是后面新建的內(nèi)容
    // CONTROLLER_NAME 當前調(diào)用的控制器名,think的變量
    // ACTION_NAME 與CONTROLLER_NAME一樣,表示當前調(diào)用的控制器下的方法
    $currentMethod=CONTROLLER_NAME.'/'.ACTION_NAME;
    // 上面其實是thinkphp一般的pathinfo模式的url格式
    // Index隨便調(diào)用,其實就是主頁,在主頁有其他設(shè)置,用于展現(xiàn)其所擁有的權(quán)限,這個后面再看
    if(CONTROLLER_NAME=='Index'){
      return true;
    }
    // 讀取用戶所擁有的所有權(quán)限,已經(jīng)將字符串解析成數(shù)組形式了
    $allowMethod=session('auth_id_lst');
    // *表示超級用戶,擁有所有權(quán)限,如果用戶請求超越自己權(quán)限的操作,則會顯示錯誤提示頁面
    if($allowMethod!='*' && !in_array($currentMethod, $allowMethod)){
      $this->error('越權(quán)操作',U('Index/index'));
    }
  }
}
?>

1.4 主頁顯示內(nèi)容

主頁是使用thinkphp的內(nèi)置標簽自動生成的,所以只要把握好輸出的內(nèi)容,就可以限制住給于用戶的操作權(quán)限,上面說過,其中賦予用戶的操作權(quán)限都是保存在session('menu')中,所以只要在內(nèi)置標簽中調(diào)用這個值進行顯示就可以了,具體內(nèi)容就是這樣。

講的很爛我知道,畢竟只花了半個小時看其中的具體內(nèi)容,之后可能會嘗試自己寫寫看吧,那時候再說吧。

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。

相關(guān)文章

  • php數(shù)組去重復(fù)數(shù)據(jù)示例

    php數(shù)組去重復(fù)數(shù)據(jù)示例

    這篇文章主要介紹了php數(shù)組去重復(fù)數(shù)據(jù)示例,有時候獲得的php數(shù)組中總是出現(xiàn)value重復(fù)的,使用下面的方法就可以去掉重復(fù)數(shù)據(jù)
    2014-02-02
  • php 偽靜態(tài)之IIS篇

    php 偽靜態(tài)之IIS篇

    上篇文章我們講解了APACHE服務(wù)器下偽靜態(tài)的實現(xiàn),不過在國內(nèi)還是IIS的服務(wù)器要多些,特別是個人站長,那么,我們再來學習下IIS下php偽靜態(tài)的實現(xiàn)過程吧
    2014-06-06
  • YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程

    YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程

    本文主要給大家介紹了YII中Ueditor富文本編輯器文件和圖片上傳的配置圖文教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • PHP設(shè)計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】

    PHP設(shè)計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】

    這篇文章主要介紹了PHP設(shè)計模式:原型模式Prototype,結(jié)合實例形式詳細分析了PHP原型模式Prototype的基本概念、功能、原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-05-05
  • php并發(fā)加鎖示例

    php并發(fā)加鎖示例

    本文介紹了php并發(fā)加鎖示例,對數(shù)據(jù)進行加鎖,只容許一個用戶在一個時間內(nèi)進行操作,這個時候就需要用到鎖了,需要的朋友可以了解一下。
    2016-10-10
  • php 實現(xiàn)301重定向跳轉(zhuǎn)實例代碼

    php 實現(xiàn)301重定向跳轉(zhuǎn)實例代碼

    本文主要介紹php 實現(xiàn)301重定向跳轉(zhuǎn),通過實例代碼讓大家更好的理解重定向的方法,有需要的小伙伴可以參考下
    2016-07-07
  • PHP實現(xiàn)的交通銀行網(wǎng)銀在線支付接口ECSHOP插件和使用例子

    PHP實現(xiàn)的交通銀行網(wǎng)銀在線支付接口ECSHOP插件和使用例子

    這篇文章主要介紹了PHP實現(xiàn)的交通銀行網(wǎng)銀在線支付接口ECSHOP插件和使用例子,需要的朋友可以參考下
    2014-05-05
  • Laravel框架處理用戶的請求操作詳解

    Laravel框架處理用戶的請求操作詳解

    這篇文章主要介紹了Laravel框架處理用戶的請求操作,結(jié)合實例形式分析了laravel框架請求、響應(yīng)以及中間件、路由等相關(guān)概念與操作技巧,需要的朋友可以參考下
    2019-12-12
  • yii的入口文件index.php中為什么會有這兩句

    yii的入口文件index.php中為什么會有這兩句

    這篇文章主要介紹了yii的入口文件index.php中為什么會有這兩句 的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • php制作的簡單驗證碼識別代碼

    php制作的簡單驗證碼識別代碼

    近期研究一些突破驗證碼方面的知識,記錄下來。一方面算是對這幾天學習知識的總結(jié)幫助自己理解;另一方面希望對研究這方面的技術(shù)同學有所幫助;另外也希望引起網(wǎng)站管理者的注意,在提供驗證碼時多些考慮進去。由于剛剛接觸這方面的知識,理解比較淺顯,有錯誤再所難免
    2016-01-01

最新評論