RBAC許可權控制【TP3.2實現】
1---引入
RBAC(Role-Based Access Control,基於角色的訪問控制),就是使用者通過角色與許可權進行關聯。簡單地說,一個使用者擁有多個角色,每一個角色擁有多個許可權。這樣,就構造成“使用者-角色-許可權”的授權模型。在這種模型中,使用者與角色之間,角色與許可權之間,一般者是多對多的關係。
2---RBAC模型設計
3---實現方法
3-1方法一
1.通過登入獲取使用者ID,通過使用者ID獲取使用者角色ID組 2.通過獲取當前許可權(控制器名/方法名)得到許可權對應的ID,通過許可權ID獲取擁有該許可權的角色ID組 3.通過函式array_intersect()獲取第一步 和 第二步 的公共部分
3-2方法二
1.通過登入獲取使用者ID,通過使用者ID獲取使用者角色ID組(使用者角色表)
2.通過使用者角色獲取角色擁有的許可權(角色許可權表)
3.查詢許可權中是否擁有當前訪問許可權
4---RBAC原始碼
[此處使用方法一實現]<?php namespace Admin\Controller; use Think\Controller; class ComController extends Controller { // 檢測非法登入 public function __construct() { parent::__construct(); if(!session('uid')){ $this->error('請登入',U('Login/login'),2); } // 調取檢測許可權方法 $comRole = $this->checkPower(); if($comRole == NULL){ $this->error('請向管理員申請許可權'); } } // 檢測許可權 public function checkPower() { // 獲取當前使用者的ID $adminId = session('uid'); // 獲取當前使用者對應的角色 $roleIdList = M('AdminRole')->where(array('admin_id'=>$adminId))->getField('rid',true); // 獲取當前 控制器 和 方法 【拼接】 $power = CONTROLLER_NAME.'/'.ACTION_NAME; //設定首頁所有登入使用者可訪問 if($power == "Index/index"){ return 1; } // 查詢當前(控制器/方法)對應的許可權的ID $power_id = M('Power')->where(array('power_url'=>$power))->getField('power_id'); // 查詢當前許可權對應的所有角色 $roleId = M('RolePower')->where(array('pid'=>$power_id))->getField('rid',true); // 檢測是否有公共項 $roles = array_intersect($roleIdList, $roleId); return $roles; } } ?>
[說明]
array_intersect ---- 計算陣列的交集
array_ intersect ( array $array1 , array $array2 [, array $ ... ] )
5---RBAC總結
5-1表詳情
shop_admin //使用者表
shop_role //角色表
shop_power //許可權表(控制器名/方法名)
shop_admin_role //使用者角色表
shop_role_power //角色許可權表
5-2表設計
CREATE TABLE `shop_admin` ( `admin_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `admin_name` varchar(20) DEFAULT NULL, `admin_pwd` varchar(50) DEFAULT NULL, `last_time` int(20) DEFAULT NULL, `error_time` int(10) NOT NULL DEFAULT '0', PRIMARY KEY (`admin_id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; CREATE TABLE `shop_role` ( `role_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `role_name` varchar(20) NOT NULL, `role_status` int(10) NOT NULL DEFAULT '1' COMMENT '啟用狀態\r\n 啟用 1(預設) \r\n停用 0\r\n\r\n', PRIMARY KEY (`role_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; CREATE TABLE `shop_power` ( `power_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `power_name` varchar(255) DEFAULT NULL, `power_url` varchar(50) DEFAULT NULL, PRIMARY KEY (`power_id`) ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8; CREATE TABLE `shop_admin_role` ( `a_r_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `aid` int(10) NOT NULL, `rid` int(10) NOT NULL, PRIMARY KEY (`a_r_id`) ) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8; CREATE TABLE `shop_role_power` ( `r_p_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `rid` int(10) DEFAULT NULL, `pid` int(10) DEFAULT NULL, PRIMARY KEY (`r_p_id`) ) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8;
RBAC總結完畢!!!
相關推薦
RBAC許可權控制【TP3.2實現】
1---引入 RBAC(Role-Based Access Control,基於角色的訪問控制),就是使用者通過角色與許可權進行關聯。簡單地說,一個使用者擁有多個角色,每一個角色擁有多個許可權。這樣,
【TP3.2.3】微信網頁授權--基類
重新 exec 進入 index.php sset AR 關註 fun func 非常好用的微信授權 基類:其他的微信權限類都可以繼承至該類: <?php namespace Wechat\Controller; use Think\Controller;
【TP3.2】TP3.2下實現ajax分頁(原創+親測可用)
條件 func edit syn model 多條 ade ges var 一,寫在最開始:ajax分頁的原理,是利用了js的ajax執行請求,獲取分頁list和分頁page 【代碼塊】,去替換頁面顯示數據的【代碼塊】 技術:js的ajax + TP3.2的fet
WPF許可權控制——【2】模組、選單、按鈕
週末沒有工作,沒有寫部落格,因為覺得休息很必要;曾聽到一句話是這樣說的:“你們得救在乎歸回安息;你們得力在乎平靜安穩”。當我想到太陽沒秒鐘要燃燒420萬噸的燃料時,想到的就是造物主的厚愛與自己的渺小,如果一直忙碌下去,一直覺得自己很了不起,地球缺了我就不轉了,那我真的是沒救了! 這
【TP3.2】詳解_initialize() 和 __construct() 的區別和聯系
instance ins 執行 構造方法 ces 實例化 direct control 初始化 1、假設 一個AdminController.class.php 集成至 \Think\Controller 類, 我們來看看Controller.class.php的構造方法源
【TP3.2.*】解決session過期不失效 和 設置不成功問題
lifetime runtime isset 清除 不成功 use 問題 func true 1、背景:本來我想設置session有效期1800秒即30分鐘 失效的,可是實際使用TP3.2.0的時候發現,登錄了幾天用戶竟然沒有失效,一直都可以登錄。 2、解決: 2.1
【TP3.2】模板 select選項采坑
sel bsp item code selected 圖片 http sele 模板 1、TP3.2 模板 select 下拉框采坑 <div class="form-item"> <label class="item-labe
Vue 前端應用實現RBAC許可權控制的一種方式
許可權控制不管前後端都可以簡單分為: 身份認證許可權控制 RBAC許可權控制 ... 而前端我和團隊,檢索了很多地方都沒有很成熟或者說可行的關於 RBAC基於角色的訪問控制相關的前端許可權控制方案,可能是我們檢索的方法不對,亦或是大家都忙於其他,沒有時間把自己的方法整理公佈出來,故我們在
【Swift 2.0】實現簡單彈幕功能
前言 簡單實現彈幕功能,表跟我談效率,但也有用佇列控制同時彈的數量。 宣告 歡迎轉載,但請保留文章原始出處:) 部落格園:http://www.cnblogs.com 農民伯伯: http://over140.cnblogs.com 正文 let DANMAKU_
【題2實現Singleton模式】
【題2實現Singleton模式】 【題目】 設計一個類,我們只能生成該類的一個例項(單例設計模式) 【思路】 不好的解法: 1.只適用於單執行緒環境 2.雖然再多執行緒環境中能工作但效率不高 可行的解法: 加同步鎖前後2次判斷例項是否已存在 強烈推薦解法: 1.利用靜態建構函式 2.實
yii2搭建完美后臺並實現rbac許可權控制案例--之左側選單子級無法高亮的問題
新增角色是屬於角色這個選單的,如何在執行新增角色這個操作時讓角色這個選單處於選中狀態呢?adminlte左側導航的Create,View等action不能定位到index的模組(左側二級導航不能展開定位)如果你是按照我們上文的教程來的,那接下來所要說明的問題應該不是問題,先
Thinking in Java 第6章 訪問許可權控制 【包:庫單元】
//宣告:部分內容引自《Java程式設計思想(第四版)》機械工業出版社 – 當編寫一個 Java 原始碼檔案時,此檔案通常被稱為編譯單元(有時也被稱為轉譯單元)。每個編譯單元都有一個字尾名 .java。 – 當編譯一個 .java 檔案時,在 Java 檔案
【Android介面實現】資訊更新小紅點顯示——自定義控制元件BadgeView的使用介紹
在現在大部分的資訊釋出類應用,都有這樣的一個功能:當後臺資料更新,比如有系統訊息或者是使用者間有互動的時候,通過在控制元件上顯示一個小紅點來提示使用者有新的資訊。一般來說,這種業務需求,我們可以在佈局檔案中隱藏一個小紅點,然後當檢測到有資料更新的時候,我們將隱藏的小紅點顯示
yii2搭建完美后臺並實現rbac許可權控制例項教程
1、安裝yii2 已安裝的請繼續看下一步操作 2、配置資料庫 2.1 配置資料庫 修改common/config/main-local.php 實際專案中本地的資料庫往往跟線上資料庫不一致, 我們這裡配置到main-local.php就可以了,產品上線後,我們
Yii2搭建後臺並實現rbac許可權控制完整例項教程
1、安裝yii2 未安裝的請參考yii2史上最簡單式安裝教程,沒有之一 已安裝的請繼續看下一步操作 2、配置資料庫 2.1 配置資料庫 修改common/config/main-local.php 實際專案中本地的資料庫往往跟線上資料庫不一致, 我們這裡配置到main-local.php就可以了,產品上線後
Yii2 rbac許可權控制之Rule實現及應用詳解
對於一般的許可權系統而言,我們之前做的rbac一般情況下是足夠的,即時沒有rule,相信你也能實現我們用rule實現的功能。 我們就以官網的例子給出一個具體的操作教程,看看這個神祕的rule到底是做什麼的! 看需求: 我們有管理員和普通使用者,對於文章系統而言,我們允許
【奇思妙想】,如何給閘道器設計一款專屬的許可權控制【責任鏈設計模式】
什麼是責任鏈模式 客戶端發出一個請求,鏈上的物件都有機會來處理這一請求,而客戶端不需要知道誰是具體的處理物件。這樣就實現了請求者
WPF許可權控制——【1】介面佈局
本來就不怎麼喜歡寫部落格,好不容易申請了部落格園的賬號,邁出了先前沒有跨越的第一步;轉眼間幾年的時間就過去了,還是空空如也。今天的心境是這樣的,發現wpf相關的資料及原始碼實在不多,就想寫下隨筆;一方面是自己在學習中做下記錄,另一方面也可以給後來者提供些參考。加利利海與鹽海最大的區別就是,前者有
WPF許可權控制——【3】資料庫、自定義彈窗、表單驗證
你相信“物競天擇,適者生存”這樣的學說嗎?但是我們今天卻在提倡“尊老愛幼,救死扶傷”,幫助並救護弱勢群體;第二次世界大戰期間,希特勒認為自己是優等民族,劣勢民族應該被消滅,這樣的思想帶來的戰爭之痛,至今讓人難以忘懷。我們的文化裡面有這樣一句話“天無絕人之路”,在西方世界是“神愛世人
【Luogu】【關卡2-1】簡單的模擬(2017年10月)
題意 pan 任務 進制 class spa -s row 機器翻譯 任務說明:開始普及組的訓練!所謂模擬,就是直接根據題意編寫,思維難度簡單。 鋪地毯 進制轉換 多項式輸出 機器翻譯 排座椅 笨小猴 都是簡單模擬題 【Luogu】【關卡2-1】簡單