我想我可以对此发表简短的评论,但是该字段太短了,如果不是正确答案,对不起,但是:
您提到了巫术-我认为这是身份验证系统,与授权无关。(我不知道魔法 gem 的实现——只是从文档中重复声明并假设描述枚举了它替换的此类系统并且它是有效的定义)。我想这只是错误。
你应该问自己的基本问题是......
您开发了多少基于角色的系统?我认为如果这只是公共/私人/管理员角色的问题,您可能应该考虑将其移至不同的 API。
在某些情况下这可能很麻烦,但对于不复杂的非附加角色值得一试。葡萄中的简单挂载将解决OOTB问题。
真正的问题是,如果您考虑一些可扩展/动态的角色系统,或者您只想干活。这可能很痛苦;-)。我认为 Rayan 的 Bytes cancan gem 实现应该可以帮助您了解如何在更高的抽象级别上解决此类问题。对于特定的(没有更高的抽象 - 例如动态角色)实现,只使用来自葡萄的当前给定的助手并将他们的职责委托给模型(基本用法)应该没问题。
helpers do
def current_user
@current_user ||= User.authorize!(env)
end
def authenticate!
error!('401 Unauthorized', 401) unless current_user
end
end
所以所有的故事都是关于如何实现 User.authorize!(env) 我相信这应该在你的模型中完成,并且完全取决于你的需要。