Ruby on rails Pundit或CanCan gem是否允许用户对用户、控制器对控制器的权限?

Ruby on rails Pundit或CanCan gem是否允许用户对用户、控制器对控制器的权限?,ruby-on-rails,ruby,cancan,pundit,Ruby On Rails,Ruby,Cancan,Pundit,我在我的网站上有一个管理部分,有30多个功能的链接。我们希望这样,每位客户服务代表都可以在非常精细的个人级别上访问这些页面(即Joe可以访问a和B页,但不能访问C页;Mary可以访问a和C页,但不能访问B页) Pundit或CanCan是这样工作的吗?还是我最好创建一个权限模型,该模型与每个管理功能都有一个布尔列的用户相关?我希望避免这种情况,因为我可以看到它很快失控。您可以使用一个整数列,并利用位掩码存储N个布尔值,而不是为每个功能创建一列。如果需要的话,有一些ruby库可以为您这样做 另一种

我在我的网站上有一个管理部分,有30多个功能的链接。我们希望这样,每位客户服务代表都可以在非常精细的个人级别上访问这些页面(即Joe可以访问a和B页,但不能访问C页;Mary可以访问a和C页,但不能访问B页)


Pundit或CanCan是这样工作的吗?还是我最好创建一个权限模型,该模型与每个管理功能都有一个布尔列的用户相关?我希望避免这种情况,因为我可以看到它很快失控。

您可以使用一个整数列,并利用位掩码存储N个布尔值,而不是为每个功能创建一列。如果需要的话,有一些ruby库可以为您这样做

另一种方法是在管理员和功能之间创建连接表(habtm关系)(如果功能尚未添加,则可以将其作为db支持的模型添加),然后授予权限就像向连接表添加一行一样简单。下面是一个例子:

class User < ApplicationRecord
  has_and_belongs_to_many :features
end

class Feature < ApplicationRecord
  has_and_belongs_to_many :users
end

# authorization
def authorized?(current_user, requested_feature)
  current_user.features.where(id: requested_feature.id).exists?
end
class用户
Pundit提供对
当前用户
对象的访问,该对象包括用户id和用户的所有其他属性。我不明白为什么你不能用它来定义用户对用户的权限。@moveson我应该在哪里存储用户对用户的权限信息?向用户模型中添加约30个额外的列,并执行类似于
current\u User.page\u a\u access?
的操作。您可以向用户模型中添加一个整数列并存储它们。下面是一个关于的示例。我会避免在权威政策中使用
current\u user
。策略已被构造为在构造函数中接收对象和用户,不需要使用其他帮助程序。@moveson感谢按位建议,但就像我告诉coreyward的那样,32布尔限制对我不起作用。我对位字段建议很兴奋,但看起来我被限制为32布尔,所以很遗憾,这不起作用。后一种解决方案是我最初想到的,但我希望避免每次添加新页面时都必须创建数据库迁移。我想我要试试序列化哈希。谢谢你的帮助!