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