使用 CanCanCan 或 Pundit 的字段级权限
Field level permissions using CanCanCan or Pundit
我目前正在使用 Rails 4.1.14 和 CanCanCan 1.13.1,并在 model/record 级别定义了精细权限。管理员可以管理所有文章,但用户只能编辑他们撰写的文章。
为了防止普通用户编辑特定字段,我根据角色使字段在 rails_admin 中可见。
visible do
bindings[:object].id == bindings[:view].current_user.roles.include? :admin
end
我也在使用 https://github.com/aasm/aasm gem 并创建了自定义操作,以便用户可以将记录移动到新状态。
但我真正想要的是根据用户的角色/记录启用字段级权限。我在 CanCanCan 或 https://github.com/elabs/pundit 页面上找不到任何文档。
有人有这方面的经验吗?
您的意思是应该允许管理员编辑记录的所有字段,但只允许编辑者更改字段 x 和 y?
是的,这在 pundit 中是可能的,因为它集成了强大的参数(无论如何你都应该使用)。 pundit readme 中还有一个示例(请参阅:强参数)。我从自述文件中简化了示例:
# post_policy.rb
def permitted_attributes
if user.admin?
[:title, :body, :tag_list]
else
[:tag_list]
end
# posts_controller.rb
@post.update_attributes(permitted_attributes(@post))
控制器中的permitted_attributes
助手由pundit提供,自动调用推断策略的permitted_attributes
方法
我目前正在使用 Rails 4.1.14 和 CanCanCan 1.13.1,并在 model/record 级别定义了精细权限。管理员可以管理所有文章,但用户只能编辑他们撰写的文章。
为了防止普通用户编辑特定字段,我根据角色使字段在 rails_admin 中可见。
visible do
bindings[:object].id == bindings[:view].current_user.roles.include? :admin
end
我也在使用 https://github.com/aasm/aasm gem 并创建了自定义操作,以便用户可以将记录移动到新状态。
但我真正想要的是根据用户的角色/记录启用字段级权限。我在 CanCanCan 或 https://github.com/elabs/pundit 页面上找不到任何文档。
有人有这方面的经验吗?
您的意思是应该允许管理员编辑记录的所有字段,但只允许编辑者更改字段 x 和 y?
是的,这在 pundit 中是可能的,因为它集成了强大的参数(无论如何你都应该使用)。 pundit readme 中还有一个示例(请参阅:强参数)。我从自述文件中简化了示例:
# post_policy.rb
def permitted_attributes
if user.admin?
[:title, :body, :tag_list]
else
[:tag_list]
end
# posts_controller.rb
@post.update_attributes(permitted_attributes(@post))
控制器中的permitted_attributes
助手由pundit提供,自动调用推断策略的permitted_attributes
方法