我使用一些 PHP 逻辑控制对我的一些静态 Web 资源的访问。因为通过网络服务器的基于目录的授权不适合或不容易实现。
事物的组合决定了访问是被授予还是被拒绝。而且这些规则会不时改变。
一开始它是一个简单的正则表达式路径匹配,以及一个会话变量的检查。现在更复杂了,因为涉及到更多变量。
我想知道如何进行重构,以便快速轻松地更改规则。当它是一个简单的“如果这个和这个,然后交付,否则 403”。直接用 PHP 就可以了。现在条件更加复杂,并且有几个嵌套级别,每个嵌套都有共同但略有不同的条件。这一切都很容易重构,但它不是最直观和最容易更新的。
我在想两件事之一。
为每个顶级条件建立类,并使用策略工厂来选择正确的授权。从包含公共位的基类中派生它们,并重载任何必要的东西。我认为当某些条件发生变化时,这仍然容易出现一些混乱。
制作一个简单的引擎来迭代一个 2d 有序规则数组,类似于防火墙规则。就像是:
<allow|deny>, <auth_group>, <path_regex>, <other vars>
我还没有完全考虑过这一点,但它似乎更容易更新,也更容易作为人类阅读。
你会怎么做?我可以为此使用已建立的模式或库吗?
前段时间我在另一个应用程序中遇到了类似的问题。我想要一种基于多个条件级别将规则和结果链接在一起的简单更新方式。这并不像那个应用程序那么复杂,但我很想听听人们用来解决这类问题的模式。