2012-04-03 25 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。它会要求他们去的网站上的小组。