訪問|設計|頁面
晚上有人問我關於網站頁面顯示的時候,許可權判斷的問題。於是就又有了這篇文章。
其實這個有很多中的方式來實現。
1,可以在每個頁面中都單獨進行許可權判斷,這個是最福士的方法。
2,可以為每一個最終分頁檔都作一個設定檔,用來進行許可權判斷,當使用者訪問這個頁面的時候,通過一個函數來判斷,是否存在這個檔案。如果存在,就根據檔案的內容進行許可權判斷,如果不存在,就不用進行許可權判斷。
3,是統一作判斷,做一個單獨的函數,通過一定的配置進行許可權判斷。
下面的一個例子是第三種方法,這種方法適合於任何的情況,且比較通用。
步驟一、整理訪問路徑資訊,把需要進行許可權驗證的路徑進行整理,整理成一個列表
步驟二、整理需要進行許可權驗證的分類,為每一種許可權驗證作一個單獨的函數,
步驟三、把 “訪問路徑”和 “許可權驗證函式”的對應關係,按 1:1 寫到一個設定檔或是數組裡面,例如下面的 filter.php 裡面的 $filter 數組
步驟四、做一個驗證函式,解析當前的訪問路徑,進行許可權判斷。
簡述,filter.php是用來包含所以驗證資訊的檔案,authorization()是一個核心的調度函數,請注意看函數裡面的說明,application.php 是一個普通的分頁檔。例子中的函數都沒有具體實現,自己補充吧。
檔案一、filter.php
<?php
$filter = array('/admin' => 'adminLogin',
'/admin/userAdmin' => 'powerAdminLogin',
'/myshop' => 'userLogin'
);
function adminLogin(){
// return '是管理員嗎'? 'SUCCESS': 'FALSE';
}
function powerAdminLogin(){
// return '是超級管理員嗎'? 'SUCCESS': 'FALSE';
}
function userLogin(){
// return '是會員嗎'? 'SUCCESS': 'FALSE';
}
function authorization(){
global $filter;
// 取出 並 解析 當前訪問的url路徑,判斷 $filter 裡面是否含有當前要過濾的路徑
// 例如當前訪問路徑是 http://www.hahawen.com/admin/userAdmin/gogo.php
// 取出/admin/userAdmin/gogo判斷 $filter 裡面是否含有 這個路徑。
// 如果沒有就在取出 /admin/userAdmin 判斷 $filter 裡面是否含有 這個路徑
// 如果有就返回 $filter 中,這個路徑(/admin/userAdmin)對應的值 $value,
// 實際上這個 $value 就是一個函數的名稱,
// 這個函數就是用來判斷目前使用者,是否對當前的訪問路徑,有存取權限的函數
// 通過 $value() 方式調用這個函數,返回 “成功” or “失敗”
// 如果失敗,就重新定向到錯誤頁面,也可以在 $value() 函數裡面進行相應的處理
// 如果成功,返回true
// 例如當前訪問路徑是 http://www.hahawen.com/news/happy/list.php
// 取出 /news/happy/list 判斷 $filter 裡面是否含有 這個路徑。
// 如果沒有就在取出 /news/happy 判斷 $filter 裡面是否含有 這個路徑
// 如果沒有就在取出 /news 判斷 $filter 裡面是否含有 這個路徑
// 如果還沒有,就表示這個頁面不許要進行許可權驗證。
// 返回 true
}
?>
檔案二、application.php
<?
require_once "filter.php";
authorization();
//其他的操作。
?>