ruby-on-rails – 使用CanCan在Rails 4上授权用户在连接表中使用一个角色

ruby-on-rails – 使用CanCan在Rails 4上授权用户在连接表中使用一个角色,第1张

概述我正在使用Rails 4.0.0, ruby 2.0.0p247和CanCan 1.6.10. 如何基于CanCan在连接表中的角色授权用户(has_many:through)? 我有3个模型:User,Group和GroupUser. 用户和组通过GroupUser表关联为has_many.每个GroupUser还有一个角色字段,可以是“编辑者”或“所有者”.一个组可以有多个用户,每个用户具有不 我正在使用Rails 4.0.0,ruby 2.0.0p247和CanCan 1.6.10.

如何基于CanCan在连接表中的角色授权用户(has_many:through)?

我有3个模型:User,Group和GroupUser.

用户和组通过GroupUser表关联为has_many.每个GroupUser还有一个角色字段,可以是“编辑者”或“所有者”.一个组可以有多个用户,每个用户具有不同的角色.此外,用户可以在多个组中拥有角色.

我有使用CanCan功能的应用程序设置,但它不是仅限制具有正确角色的用户的访问权限,而是授权所有人.

模型设置如下.另请注意,Group有一种方法可以返回其所有者列表.

class User < ActiveRecord::Base  has_many :group_users  has_many :groups,through: :group_usersendclass Group < ActiveRecord::Base  has_many :group_users  has_many :users,through: :group_users  def owners    User.find(self.group_users.where(role: 'owner').map(&:user_ID))  endendclass GroupUser < ActiveRecord::Base  belongs_to :user  belongs_to :groupend

CanCan能力.请注意,它在Group上使用owner方法.

class Ability  include CanCan::Ability  def initialize(user)    can :update,Group do |group|      group.owners.include?(user)    end  endend

视图如下.在这里,无法看到链接的用户仍然可以看到它.

<ul >    <% @groups.each do |group| %>        <li>            <p><%= group.name %></p>            <% if can? :update,Group %>                <%= link_to "Edit",edit_group_path(group) %>            <% end %>        </li>    <% end %></ul>

最后,视图的Controller *** 作是:

def index  @groups = current_user.groupsend

. . .
有趣的是,即使它在实际使用中不起作用,下面的单元测试也会通过:

test 'user can only update groups they own' do  ability_one = Ability.new(users(:one)) # Owner  ability_two = Ability.new(users(:two)) # Not-owner  assert ability_one.can?(:update,groups(:one))  assert ability_two.cannot?(:update,groups(:two))end
解决方法 我认为你应该让cancan在这里使用真实对象,将实际的组对象传递给can?方法而不是Group类:

在视图中:

<% if can? :update,group %>

代替:

<% if can? :update,Group %>

这样,如果current_user能够:更新实际组,您将询问cancan.由于没有为通用Group对象设置 *** 作的能力,因此第二个条件将始终为true.

总结

以上是内存溢出为你收集整理的ruby-on-rails – 使用CanCan在Rails 4上授权用户在连接表中使用一个角色全部内容,希望文章能够帮你解决ruby-on-rails – 使用CanCan在Rails 4上授权用户在连接表中使用一个角色所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1275676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存