我正在构建的一个系统似乎需要一些复杂的规则,而不是在整个系统中有一大堆规则。我想把整个过程集中起来。(这可能不是我最聪明的想法)
我最聪明的想法(也许是最不聪明的想法)是使用一个单独的类来检查任何对象,然后根据不同字段中允许值的列表保存到数据库中。它与数据库结构紧密相连,但相当容易测试和维护。
规则示例:
-
版主可以提交具有版主状态但不具有管理员状态的评论。
-
comments.status只能是normal或ordinator(admin是为管理员保留的)
-
用户不能修改评论的版主值
-
comments.status只能正常,comments.display只能正常
-
只有版主可以挂起用户帐户
-
只有版主可以修改其他用户帐户
-
只有具有付费帐户的用户才能执行X、Y和Z操作。
我的问题是,我应该把这个逻辑放在哪里。这对于Rails验证来说太复杂了。如果我只查看登录用户的状态,实现其中一些规则是困难的或不可能的。当前的解决方案是创建一个安全类,该类将接受数据库对象和用户,并允许或不允许执行操作。
如果我遵循这一行动方针,那么实现将非常糟糕。现在我在看这样的东西
#For every field on an object passed to Security::allow?(user, object), call this private method
def allow_helper?(user, object, field)
perm = permissions[user.rank][object.class.name][field]
if perm.is_a? Array
perm.include? object.send(field)
else
perm
这很快就会变成一场噩梦。除了我梦见的这场噩梦,一定还有别的选择。在我编写代码之前我停了下来。