2012-04-03 41 views
1

我一直在Google上搜尋幾天,並遇到不同的方式來保護文件夾(htaccess,使用PHP頁面和密碼),但這些不解決我的問題。PHP如何限制文件夾和網站內容給不同的用戶?

問題: 我需要一個網站,讓不同的客戶只能訪問他們的內容。客戶-A需要能夠訪問他們所有的Flash內容和網站。 Client-B和Client-C需要做同樣的事情,但他們都不能訪問其他內容(甚至直接鏈接到它)。用戶名/密碼系統將無法工作,因爲每個客戶端有400-1000個用戶,我或客戶端都沒有時間管理所有這些用戶。

我看着htaccess和htpasswd,但我不喜歡使用任何用戶名/密碼組合。理想情況下,我想要一個可以從iPad應用程序或Air程序傳遞到服務器的「祕密詞」或「密碼」,以獲取我需要的內容。任何人都有一些想法來處理這個問題?

編輯:爲了簡化事情...我想要HTML網站和Flash SWF的上方我的網站根,並能夠顯示給用戶。我怎樣才能做到這一點?我有HTML網站使用相對鏈接,所以使用php的readfile()會導致這些網站中斷,因爲這些鏈接不正確。

+0

難道你不能爲每個客戶端而不是每個用戶分配登錄/密碼嗎?只要每個用戶擁有相同的權限,就讓他們都使用相同的憑證登錄。 – 2012-04-03 13:50:55

+0

我在想同樣的事情@SurrealDreams – Bono 2012-04-03 13:53:37

+0

我希望這個過程對用戶是透明的。客戶有幾個承包商,所以他們不希望承包商在他們的合同到期後獲得訪問權限。所以如果我可以限制只有軟件的可訪問性(沒有用戶輸入),那將是理想的。 – beefwellington 2012-04-03 14:29:05

回答

1

您使用的是什麼RDBMS?

隨着mod_authn_dbd和一個基本的認證,你將能夠這樣做。

這樣的事情,

AuthType Basic 
AuthName "My Server" 
AuthBasicProvider dbd 

# core authorization configuration 
Require valid-user 

# mod_authn_dbd SQL query to authenticate a user 
AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s" 
+0

我寧願不顯示任何登錄表單。我需要它對用戶是不可見的。 – beefwellington 2012-04-03 14:34:01

+0

在這種情況下,Ispcity建議的解決方案可能最適合您的需求。 – 2012-04-03 14:36:11

0

如果你有超過其發送請求的軟件控制,你可以一個自己的X-header添加到每個標識的用戶請求。

隨着apache_request_headers()你可以從請求自己的請求頭: http://www.php.net/manual/en/function.apache-request-headers.php

==============

後的第一個評論

編輯:

例如某些代碼:

globals.php

$headers = apache_request_headers(); 
$key = $headers["X-Authorization-Key"]; 

$authorized = checkAuthorization($key); 
if(!$authorized) { 
    header('HTTP/1.1 403 Forbidden'); 
    echo "Access denied!"; 
    exit; 
} 

//... db connection or something else to get user specific definitions, paths, ... 
//e.g.: 
$user = $users[$key]; 
define("CONTENT_PATH", "/var/www/mypage/data/".$user); 

function checkAuthorization($key) { 
    //... db connection or something else where the authorization-information are stored in 
    //check whether the $key is in the auth-info and return true/false for the result 
    return true; //or false 
} 

在上面每一個腳本:

<?php 
require_once("globals.php"); 
//... work with the user specific definitions, paths 
include(CONTENT_PATH."/..."); 
//... 
+0

這是我可以通過自定義標題通過htaccess限制嗎? – beefwellington 2012-04-03 15:13:01

+0

我不這麼認爲,但是你可以添加一個函數,在授權用戶的每個文件之上調用(例如,在每個腳本文件頂部包含的globals.php中) – 2012-04-04 07:51:16

0

你要做的就是當用戶創建自己的登錄帳戶,他們必須選擇他們所使用的組的選項。然後,當顯示頁面信息時,它將顯示普通頁面,但包含其中的權限名稱。你將不得不建立3個獨立的內容頁面,但他們只會看到他們選擇的組的內容。

homegroup1.php homegroup2.php homegroup3.php

如果用戶是在一個組,直接將家爲顯示「組」 .PHP。它會要求他們去的網站上的小組。