我使用PHP为我们公司创建了一个内部网。每个页面上都会显示相同的菜单,其中包含指向敏感页面和文档(如Word文件)的链接。
目前只有办公室员工可以访问该网站,但我们希望将其打开给一些外地承包商。问题是,我必须限制某些内容的访问权限。
我知道how to password-protect site directories with Apache,但我宁愿自己隐藏菜单选项。
你会怎么做?
澄清:这是在每个人都在本地或通过VPN登录我们的Windows网络的环境中,但目前没有人必须登录才能看到我的内部网站点。如果可能的话,理想的解决方案不要求他们做任何额外的事情。
答案 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']吗?