我正在 php codeigniter 中开发一个应用程序。现在我在获得许可后感到困惑。
我需要页面明智的许可,页面可以添加记录页面,编辑页面,删除页面和打印报告等。也会有很多用户,应用程序会随着时间的推移而增长。
如果我实现对我更好的ACL
对我来说什么是理想的任何建议。
答案 0 :(得分:3)
首先,让我们澄清一些术语:我个人使用安全性术语来防止SQL注入,XSS攻击,我们必须验证输入,过滤/清理值,处理动态生成的SQL命令,负责正确转义输出(对于JSON或HTML文本或HTML属性)等。如果我理解的话,这是不关于你的要求。
访问控制或权限系统是您为用户提供或拒绝访问功能的位置。它可以安全与否。我理解为了拒绝没有权限的用户访问某个函数可能听起来像“安全”,但我不会在这种情况下使用这个特定的单词,以避免混淆。
现在,答案是:
我强烈建议您根据需要创建一些基本控制器类。请仔细阅读以下博文(简短且有用):http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY
检查用户是否经过正确身份验证(登录)的代码至关重要。如果用户未登录,请重定向到主页或登录页面。
对于细粒度控制,您可以使用users
表,actions
表加上acl
表格在数据库中创建ACL ...
users
表将包含用户数据(id,名称,登录名,密码等)
actions
表将包含id字段,并且至少还有一个字段包含最适合您的应用程序的字段:它只能是控制器类名称(URL的第一部分,例如:“products” “),是否允许访问整个”产品“控制器。或者您可能希望同时包含控制器类和方法名称(URL的第一部分和第二部分,例如:“products / add”和“products / delete”),等等。
决定actions
表是最具决定性的一步。好好考虑一下,平衡你的需求(你的“真正的”需求)......我开发了一个系统,每个动作都有它的入口。它很好,但工作需要维护。
actions
表的一个非常有用的列是对该操作的可读描述。
acl
然后只会是用户ID的列和操作ID的另一列。
users
表中的“主”授予/拒绝访问字段也很有用,以防您想要暂时拒绝来自特定用户的访问,而不必删除他的所有权限,也可能需要恢复它后面。
通过很好地定义数据库表和“控制器/方法”或“操作”策略,您可以轻松地在基本控制器类中编写一个函数,该函数检查用户是否有权执行请求的操作。
这是基本的。在我的系统中,我有用户管理界面,我可以为每个用户授予/拒绝操作(我使用带复选框的ExtJS树)。其中一个操作是自己的用户管理。我更进了一步,可以访问用户管理的用户可以只将他自己有权访问的操作“委托”(授予/拒绝)给其他用户。
系统有几个模块和功能。界面不显示用户无权访问的任何内容。所以,我的用户只能看到一个或几个模块,他们甚至没有想到其他模块的存在。
管理所有这些需要更多的工作,但结果是值得的。
我还记录每个授予访问权限,因此可以跟踪谁做了什么,何时做了什么。此日志功能非常易于添加,因为您具有此基本控制器“主功能”允许或禁止用户执行操作。
我希望我有所帮助。我刚刚分享了一些对我有用的东西......并且有效...