PHP CodeIgniter通过URI对功能进行授权

PHP CodeIgniter通过URI对功能进行授权,php,mysql,codeigniter,authorization,Php,Mysql,Codeigniter,Authorization,我正在设计一个web应用程序,它严重依赖于数据库表/记录,并且已经设计了登录系统。目前,登录系统在会话中创建一个元素来验证用户是否已登录。这个很好用 然而,在编写应用程序时,我发现经常需要检查我的用户是否有权执行某些操作 例如,我有一个功能,允许用户在www.mywebsite/account/edit/1->1中编辑他们的个人资料,作为Id。就未来的可伸缩性而言,执行数据库查询以检查当前登录的用户在到达该URL后是否有权编辑他们的信息是否可行? 当然,我担心的是,有人会输入一个随机Id来编辑另

我正在设计一个web应用程序,它严重依赖于数据库表/记录,并且已经设计了登录系统。目前,登录系统在会话中创建一个元素来验证用户是否已登录。这个很好用

然而,在编写应用程序时,我发现经常需要检查我的用户是否有权执行某些操作

例如,我有一个功能,允许用户在www.mywebsite/account/edit/1->1中编辑他们的个人资料,作为Id。就未来的可伸缩性而言,执行数据库查询以检查当前登录的用户在到达该URL后是否有权编辑他们的信息是否可行? 当然,我担心的是,有人会输入一个随机Id来编辑另一个帐户

我还考虑过在每次转换之间创建一个表单来发布这些数据,但这本身就有很多限制


我想知道是否有人遇到过同样的问题,并找到了这个问题的整体解决方案

这是每个人在某个时候都会关注的问题。在我看来,你真的在问几个问题:

  • 如何确保用户有权访问某些内容?及

  • 每次检查数据库真的是最好的方法吗

  • 关于第一个问题:你采取的方法可能是唯一现实的方法。归结起来就是:每当用户需要做某事时,您的应用程序都需要检查一些东西,看看是否允许他们做。那是什么东西?它被称为访问控制列表(ACL)

    您可以在应用程序中硬编码ACL,但这是一个非常糟糕的主意。这意味着您必须将ACL的详细信息存储在某个位置。当我们开始谈论在应用程序中存储某些东西时,显而易见的答案是(几乎)总是在数据库中

    这引出了第二个问题。。。只要数据库设计合理,快速检查数据库以查看用户是否具有访问权限通常不会成为巨大的瓶颈。您将执行类似于
    从acl中选择key,其中key='something'和user_id='current user id'并检查以确保至少得到一个结果。这会给您的应用程序增加一点开销,但是有什么替代方案呢?某种硬编码的ACL?加载应用程序的完整ACL并在PHP代码中搜索密钥和用户ID


    如果您真的关心存储在MySQL中的ACL所涉及的开销,您可以查看其他一些数据库,例如or,对于简单的键/值对查找,哪个应该更快(注意,我已经查看了MongoDB和CouchDB,但在应用程序中都没有使用),但我认为您会发现,对于大多数应用程序,在MySQL中运行应该很好。

    我非常感谢您花时间详细回答我的问题——这正是我想要的。我将研究MySQL ACL设计,并尝试在我的应用程序中实现它。谢谢你,克瑞顿!