gpt4 book ai didi

ruby-on-rails - 使用 CanCan 指定拒绝访问的原因

转载 作者:行者123 更新时间:2023-12-04 16:35:51 25 4
gpt4 key购买 nike

我真的很喜欢 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com