我真的很喜欢 Rails 授权 gem CanCan .但是,我发现自己在某些权限上有多个条件,我希望能够根据用户被拒绝访问的原因向用户提供不同的错误消息。
CanCan 有这种行为的机制吗?我找不到它。我是否必须自己 fork 并添加该行为?
最佳答案
我不认为您可以直接使用 CanCan 来做到这一点。它只是提供了一种方式来说明用户是否可以做某事。
我想知道您是否可以通过定义多个 Ability
子类来检查权限,以非典型方式使用它。默认实现是为当前用户创建一个 Ability
实例并询问它。
如果您创建了一组 Ability
子类来反射(reflect)您要检查的不同类型的访问权限,那么您可以依次询问每个子类用户是否可以做某事。第一个拒绝许可的将用于生成您的特定错误消息。
您实际上只需要创建一个总体能力类来组合 Ability
子类的集合,并在 CanCan 提供的 current_ability
方法中创建它以返回能力对于当前用户。然后,通过在您的类上提供相同的 can?
和 cannot?
方法,它将以与正常能力相同的方式工作,但您可以将其扩展到提供一个 why?
方法,该方法可以识别哪个 Ability
子类拒绝了权限,并因此生成不同的错误消息。
实际上,您还必须提供 authorize!
的新实现,以使其返回您想要的错误消息。
抱歉,答案很长,基本上是 - 你必须自己做。
关于ruby-on-rails - 使用 CanCan 指定拒绝访问的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3867553/