【问题标题】:PHP CodeIgniter Authorization of Features via URIPHP CodeIgniter 通过 URI 授权功能
【发布时间】:2014-07-07 20:02:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php mysql codeigniter authorization


    【解决方案1】:

    这是每个人在某个时候或另一个时候都会解决的问题。在我看来,您实际上是在问几个问题:

    1. 如何确保用户有权访问某些内容?和

    2. 每次检查数据库真的是最好的方法吗?

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

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

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

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

    【讨论】:

    • 非常感谢您花时间详细回答我的问题——这正是我所寻找的。我将研究 MySQL ACL 设计并尝试将其实现到我的应用程序中。谢谢你,Kryten!
    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多