我真的很喜欢 Rails 授权宝石CanCan。但是,我发现自己在某些特权上有多个条件,并且我希望能够向用户提供不同的错误消息,具体取决于他或她被拒绝访问的原因。
CanCan 有这种行为的机制吗?我很难找到它。我是否必须自己分叉并添加该行为?
我真的很喜欢 Rails 授权宝石CanCan。但是,我发现自己在某些特权上有多个条件,并且我希望能够向用户提供不同的错误消息,具体取决于他或她被拒绝访问的原因。
CanCan 有这种行为的机制吗?我很难找到它。我是否必须自己分叉并添加该行为?
我不认为你可以直接使用 CanCan 来做到这一点。它只是真正提供了一种方式来说明用户是否可以做某事。
我想知道您是否可以通过定义多个Ability
子类来检查权限以非典型方式使用它。默认实现是Ability
为当前用户创建一个实例并询问它。
如果您创建了一组Ability
子类来反映您想要检查的不同类型的访问权限,那么您可以依次询问每个子类用户是否可以做某事。然后,第一个拒绝许可的人将用于生成您的特定错误消息。
您实际上只需要创建一个总体能力类来组合Ability
子类的集合,并在 CanCan 提供的方法中创建它current_ability
以返回当前用户的能力。然后,通过在您的类上提供相同的can?
和cannot?
方法,它将以与正常功能相同的方式工作,但您可以扩展它以提供一种why?
方法,该方法可以识别哪个Ability
子类拒绝许可并生成不同的错误消息作为结果。
实际上,您必须提供authorize!
too 的新实现以使其返回您想要的错误消息。
抱歉,很长的答案基本上是 - 你必须自己做。