PHP - 应用多级PHP用户授权的良好实践

时间:2010-08-03 15:47:30

标签: php

鉴于网站网站具有不同的网页,只能由不同的用户组访问。假设访客用户只能访问欢迎页面/搜索页面,而管理员用户可以访问更新数据库等的页面。

我对这个领域缺乏经验,并希望采用干净/简单/安全实施的最佳实践。

如果可能的话,我希望看到一些具体的例子/教程,甚至书籍资源。

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

我发现许多在线提供的应用程序(Wordpress,Joomla和许多其他应用程序)在这个领域的组织非常糟糕(在任何情况下都比我的做得差)。

看看它如何为Zend Framework,CakePHP,Symfony等MVC框架完成。 MVC主要用于更有组织的大型项目,因此我打赌他们在认证方面也做了很多工作。

总而言之,为了使其正常工作,所有页面生成类(我建议使用OOP)必须从父类派生,它将保存访问控制方法。或者你可以有一个带静态函数的类来进行访问控制。在执行任何操作之前,只需调用这些函数来检查用户是否可以访问此功能。功能可以分组为类,具有许多方法(在MVC中 - 控制器和动作)。您可以按如下方式将访问信息存储在数据库中:groupID, Class, Method, Permission,其中权限可以是布尔值Grant或Deny。要提升速度,请在第一次查询时提取所有用户的权限,将其存储在数组或对象中,以便不为用户请求中的每个权限验证生成查询,而是解析保存的数据。

答案 1 :(得分:3)

每个用户都可以在您的应用程序/网站中拥有一个或多个角色。想象一下,您有一个应用程序,其中一些人可以编辑用户,其他人可以插入任务,而其他人可以解决任务。创建三个角色:用户管理器,任务分配器和任务解算器。

然后给用户他们的角色。

有些人称角色组。您将人员分组以授予他们权限。我更喜欢称之为角色,因为用户充当人力资源经理或网站发布者等。

这只是一个简单的例子,它始终基于您的要求。可以有基于团队的权限,基于部门的权限等。

http://en.wikipedia.org/wiki/Role-based_access_control

就个人而言,我将应用程序分解为模块。每个模块都有对象,这些对象都有动作。示例:user.department.list =在模块用户中,有一个对象部门和操作列表(部门)。创建角色或组时,请将这些权限分配给该角色(组)和用户。对于角色用户经理,有权限user.user.listuser.user.edituser.department.listuser.department.edit。在您对用户进行身份验证(以了解他是谁)加载他分配给的角色之后。每个页面(控制器)或每个方法都可以检查用户的权限 - 该用户是否允许列出部门?

相关问题