是否可以使用AASM设置防护来控制用户角色的事件访问?
这似乎是一个相当常见的用例,但我找不到一个很好的答案.许多人似乎建议在控制器中保留权限逻辑,这肯定有效,但意味着将状态机逻辑放入多个控制器中.这有几个原因很糟糕,但最关键的是对SM的任何更新都需要找到与模型一起修改的所有用法.
我提出的解决方案是有效的,但我很好奇是否有人找到了更好的解决方案.
我的解决方案
在我的AASM课程中,我已经包括在内;
aasm do
before_all_events set_user
event :sample_event, :guard => :user_can? do
transition ...
end
end
private
def set_user user
@user = user
@user ||= User.new
end
def user_can?
@user.some_check_on_attributes?
end
这反过来允许我在我的控制器内做:
aasm_class.sample_event current_user
检查当前用户,或者交替;
aasm_class.sample_event
检查默认用户.
这是解决这个问题的最佳方式吗?有人有更好的建议吗?
最佳答案 我使用
sentient_user gem来破坏MVC,但允许您从模型中访问User.current.