3

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

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

4

1 回答 1

2

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

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

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

您实际上只需要创建一个总体能力类来组合Ability子类的集合,并在 CanCan 提供的方法中创建它current_ability以返回当前用户的能力。然后,通过在您的类上提供相同的can?cannot?方法,它将以与正常功能相同的方式工作,但您可以扩展它以提供一种why?方法,该方法可以识别哪个Ability子类拒绝许可并生成不同的错误消息作为结果。

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

抱歉,很长的答案基本上是 - 你必须自己做。

于 2010-10-05T21:16:46.560 回答