ruby-on-rails – 由current_user保护的AASM

是否可以使用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.

点赞