1. 程式人生 > >PHP MVC中RBAC的最佳實現方案的比較

PHP MVC中RBAC的最佳實現方案的比較

個人認為的PHP MVC框架中實現RBAC的原理 順序:

資料表

1.tb_user(id,uname,roleid)
2.tb_role(roleid,rolename)
3.tb_module(moduleid,moudulename,mvc_url)
4.tb_access(accessid,roleid,mouduleid)

實現原理

1. 根據$uid 得到 $roleid2. 根據當前MVC引數 __CLASS__ __METHOD__ 拼接成路由網址 $mvc_url
3. 根據 $mvc_url 去表 tb_module中查詢,得到 $moduleid
4. 根據 $roleid
,$mouduleid 查詢表 tb_access中是否有此條記錄 5. 如果 有,可以訪問;如果沒有,禁止訪問該動作 action 方法

缺點
假如有一個模組, class Article,方法function lists();。
如果當前使用者只有檢視許可權卻沒有修改、新增、刪除許可權,那麼lists頁面中關於 新增 修改 刪除 按鈕如何判斷?

另外一個方法

資料表

1.tb_user(userid,username,roleid)
2.tb_role(roleid,rolename)
3.tb_module(moduleid,moudulename,link,upid)
4.tb_permission(roleid,title,mouduleid,permission) 

其中 permission 的值有這幾種

{1:檢視,2:新增,4:修改,8:刪除,16:...}

RBAC實現流程
1.通過使用者的 $userid 得到 $roleid
2.通過使用者當前的網址去查詢tb_module表中對應的link,得到 $moduleid。如果該module有父模組。那麼獲得他的父模組。比如當前模組MVC網址是 article/add,那麼他的真正moduleid是

select moduleid from tb_module 
where id=(
    select upid from tb_module where link='article/add'
)

3.通過 $roleid 和 $moduleid 去查詢 tb_permission,得到記錄總和

select sum(permission) as permission from tb_permission
where roleid=$roleid and moduleid=$moduleid

4.如果當前訪問 article/lst

switch($permission){
    case 1: //只有訪問許可權
        break;

    case 2://訪問、新增許可權
        break;

    case 4://訪問、新增、修改許可權
        break;

    case 8://訪問、新增、修改、刪除許可權
        break;

    case 16:
        break;
}

對於第二種方法,說下看法,類似於電腦檔案的 0777這種許可權。

相關推薦

PHP MVCRBAC最佳實現方案比較

個人認為的PHP MVC框架中實現RBAC的原理 順序: 資料表 1.tb_user(id,uname,roleid) 2.tb_role(roleid,rolename) 3.tb_module(moduleid,moudulename,mvc_url) 4.tb_a

php負載使用redis實現session會話保持

handler 們的 清理 數據庫 session serial 配置 ibm 方式 首先要明確session和cookie的區別。瀏覽器端存的是cookie每次瀏覽器發請求到服務端是http 報文頭是會自動加上你的cookie信息的。服務端拿著用戶的cookie作為key

ASP.NET Core MVC 重寫DefaultControllerActivator實現屬性注入

ASP.NET Core中注入方式預設為構造器注入,不支援屬性注入以及其他更高階的注入.參考下面的說明: 但是對於習慣了屬性注入的開發人員來說比較頭疼,為了實現自動注入,需要額外加一個建構函式,還需要把需要提供的服務一一對應,這種操作兼職逼死強迫症.當然官方也給出解決方

PHP程式碼是如何實現檔案上傳的?

這裡使用PHP的全域性陣列$_FILES來實現檔案上傳: $_FILES[“file”][“name”] - 被上傳檔案的名稱 $_FILES[“file”][“type”] - 被上傳檔案的型別 $_FILES[“file”][“size”] - 被上傳檔案的大小,以位元組計 $_F

MVC 使用 autofac 實現自動註冊

思路很簡單:首先我們去找到所有Dll,再去找到實現了IAutoInject 介面的類,然後使用RegisterAssemblyTypes進行注入。IAutoInject是一個空介面,用來輔助我們尋

php呼叫R的指令碼實現方案

        由於在php網頁中,不可避免的需要R語言的強大功能。因此,在對於某些數學函式的實現,我們需要R語言來實現。具體做法就是,利用php的system函式呼叫R指令碼,從而實現對R指令碼的執行,通過php的檔案操作,從而獲取R指令碼執行結果。基本程式碼如下:

ASP.NET MVC使用OutputCache實現伺服器端頁面級快取注意問題

    CSDN廣告是越來越多了,所有部落格筆記不再更新,新網址 DotNet筆記 1) 血的教訓:先說使用OutputCache實現伺服器端頁面級快取注意問題 在ASP.NET MVC中,假如我們想要將某個頁面(即某個Action)快取在伺服器端,可以在Action上

案例:PHP Ajax 跨域最佳解決方案

本文通過設定Access-Control-Allow-Origin來實現跨域。 例如:客戶端的域名是edu.jb51.net,而請求的域名是edu.jb51.net。 如果直接使用ajax訪問,會有以下錯誤: XMLHttpRequest cannot load htt

ASP.NET MVC使用JS實現不對稱加密密碼傳輸

摘要:ASP.NET MVC中登入頁面中點選登入後,使用者名稱、密碼將被明文傳輸到Controller中,使用Fiddler等工具可以輕鬆截獲並獲取密碼, 這是不安全的。 使用對稱加密,如AES,金鑰將被暴露前端程式碼,也是不安全的。使用不對稱加密能夠較好解決這個問題。本文

Laravel自增實現方案

領取 更新數據 app public bin mpi 加減 進程 value 工作中經常會對一列數據進行自增操作,設想一個場景。總共發放10張優惠券(以下的操作以時間為序列)1)用戶1請求領取1張優惠券;2)進程1查詢到數據庫中剩余10張,代碼更新優惠券數量,此時為內存中優

棋牌平臺制作教程之php的炸金花大小比較算法

算法 棋牌 PHP中紮金花比大小如何實現在棋牌遊戲中,不管是現實的還是線上的,炸金花無疑是最熱門棋牌遊戲之一,鄙人從小就酷愛炸金花,機緣巧合後面從事了IT行業,話不多說,直接進去正題吧。炸金花兩副牌的比較規則就不說了,註明一下是順子的時候 : JQK < A23 < QKA思路:炸金花下面

PHP Ajax 跨域問題最佳解決方案

ajax 跨域 域名 -c php文件 解決 tle ron 跨域訪問 客戶端 本文通過設置Access-Control-Allow-Origin來實現跨域。 例如:客戶端的域名是client.runoob.com,而請求的域名是server.runoob.com。 如

PHP使用CURL實現GET和POST請求

由於 protocol 對稱加密 即使 匯報 bst 接口 useragent 拷貝 一、什麽是CURL? cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。最爽的是,PHP也支持 cURL 庫。使用php的cURL

使用mysql的SUBSTRING_INDEX函數解決項目編碼非重復問題的實現方案!

sel str strong mage 技術分享 介紹 mysq 實現 編碼 一 SUBSTRING_INDEX函數介紹 作用:按關鍵字截取字符串 substring_index(str,delim,count) 說明:substring_index(被截取字段,關鍵字,關

ASP.NET MVC如何實現頁面跳轉

pub ring 項目 再見 name ati 方法 技術 mod 1,最簡單的方式:超鏈接 以下分別是連接到HomeController控制器下的SharpL動作方法,以及百度首頁。代碼如下: 1 <a href="Home\SharpL">打開S

PHP ajax跨域問題最佳解決方案

var cell clear 一定的 OS 添加 會有 request TP 一、本文通過設置Access-Control-Allow-Origin來實現跨域。 例如:客戶端的域名是client.runoob.com,而請求的域名是server.runoob.com。 如

PHP開發基於layUI的三級聯動效果如何實現

ice type idt tex oct port inf eal 如何實現   後臺開發常常用到layUI框架,這樣才能讓整個頁面效果看起來美觀大方,然而有時候一些原生的效果放到layUI框架上是無法使用的,比如最近遇到了省市縣三級聯動的select效果。不同於之前的,l

php開發Excel導入功能的具體實現方法

org read tro 功能 tac excel導入 max eat ade 對於在做php開發項目中,一般的項目設計到最多用到的是Excel的導出功能,而對於其導入功能一般是很少見的,而且對於php開發中Excel的導入功能也要比導出功能開發起來更困難一些,那麽今天就來

PHP Ajax 跨域問題最佳解決方案 【摘自菜鳥教程】

set color ray quest origin tty 所有 $origin con PHP Ajax 跨域問題最佳解決方案 分類 編程技術 http://www.runoob.com/w3cnote/php-ajax-cross-border.html 本文

Asp.net MVC如何實現依賴注入(DI)(二)

昨天說了一下Castle與Autofac如何在MVC中的使用,今天再來簡單說一下Spring.Net框架在MVC中如何依賴注入的。 官網:http://www.springframework.net/ 專案結構圖:   首先,我們要在專案中新增Spring.Net的類庫引用,我們可以在N