使用CanCan指定拒绝访问的原因

时间:2010-10-05 20:41:40

标签: ruby-on-rails cancan

我非常喜欢Rails授权gem CanCan。但是,我发现自己在某些特权上有多种条件,我希望能够向用户提供不同的错误消息,具体取决于他或她被拒绝访问的原因。

CanCan是否有这种行为的机制?我找不到它。我是否必须自行分叉并添加该行为?

1 个答案:

答案 0 :(得分:2)

我认为你不能直接用CanCan做到这一点。它只是真正提供了一种说明用户是否可以做某事的方法。

我想知道你是否可以通过定义多个Ability子类来检查权限,从而以非典型的方式使用它。默认实现是为当前用户创建Ability的实例并询问该实例。

如果您创建了Ability子类的集合以反映您想要检查的不同类型的访问,那么您可以依次询问每个用户是否可以执行某些操作。然后,第一个拒绝权限将用于生成您的特定错误消息。

您只需要创建一个总体能力类来组合Ability子类的集合,并在CanCan提供的current_ability方法中创建该类以返回当前用户的能力。然后,通过在您的课程中提供相同的can?cannot?方法,它将以与普通能力相同的方式工作,但您可以将其扩展为提供why?方法这可以识别哪个Ability子类拒绝权限并因此生成不同的错误消息。

实际上,您还必须提供authorize!的新实现,以使其返回您想要的错误消息。

对不起,基本上答案很长 - 你必须自己做。