如何使用PHP隐藏某些用户的某些内容?

时间:2009-01-09 15:25:29

标签: php

我使用PHP为我们公司创建了一个内部网。每个页面上都会显示相同的菜单,其中包含指向敏感页面和文档(如Word文件)的链接。

目前只有办公室员工可以访问该网站,但我们希望将其打开给一些外地承包商。问题是,我必须限制某些内容的访问权限。

我知道how to password-protect site directories with Apache,但我宁愿自己隐藏菜单选项。

你会怎么做?

澄清:这是在每个人都在本地或通过VPN登录我们的Windows网络的环境中,但目前没有人必须登录才能看到我的内部网站点。如果可能的话,理想的解决方案不要求他们做任何额外的事情。

6 个答案:

答案 0 :(得分:3)

如果用户正在登录,则可以使用其登录详细信息来限制访问。您可能想要研究Access Control Lists

的想法

如果您的用户使用Apache登录,那么您可以从$ _SERVER ['PHP_AUTH_USER']访问他们的用户名。所以你可能想做这样的事情:

$username = $_SERVER['PHP_AUTH_USER'];
$user_id = lookup_user_id($username); // a function you write that looks up their user id in your database of users

然后您可以类似地查找他们的访问级别 - 他们可能具有用户状态,如“访客”或“超级用户”或“管理员”,或者您可能希望到目前为止拥有资源和用户矩阵,为每个用户和资源指定该用户是否可以访问该资源。

否则,像CakePHP这样的框架会为你提供(几乎)免费的这种东西。

答案 1 :(得分:1)

我会创建一个PHP函数来生成侧边栏中的菜单项或显示这些链接的位置,并根据用户是否以员工身份登录来填充菜单。当然,您还需要密码保护您想要限制访问的各个目录,但您已经知道了。

更好的方法是使用像CakePHP这样的框架或像Drupal这样的平台,它已经内置了你可以利用的用户和角色功能。

答案 2 :(得分:0)

我会使用CodeIgniter添加一个轻量级用户身份验证系统。

然后,在显示菜单或允许访问任何受保护内容之前,只需检查用户是否已通过身份验证。

答案 3 :(得分:0)

这取决于您当前员工的身份验证方式。我们在公司讨论了这个问题,允许某些合作伙伴访问员工门户网站。我们针对由我们的服务调度软件管理的数据库进行身份验证,因此一种解决方案是添加一个标记为“Partner”的复选框,该复选框将告知身份验证脚本针对不同的数据库进行身份验证。

如果没有更多信息,很难描述一个适合您的解决方案。

答案 4 :(得分:0)

我想我可能会要求用户登录(每天一次?)并向他们发送加密的cookie来维护该会话。

似乎不可能(并且出于安全原因,它可能不应该使他们的网络登录对此站点执行双重任务。

答案 5 :(得分:0)

也许您可以针对内部IP范围检查$ _SERVER ['REMOTE_ADDR']吗?