Ruby on rails 创建验证器检查登录的user.id是否与我的行user\u id相同,这是一个好主意吗?

Ruby on rails 创建验证器检查登录的user.id是否与我的行user\u id相同,这是一个好主意吗?,ruby-on-rails,ruby-on-rails-3.2,authlogic,Ruby On Rails,Ruby On Rails 3.2,Authlogic,我只是不确定方法。事实上,我遇到过这种情况: User belongs_to Organization Organization has_many User Organization has_many MembershipCard MembershipCard belongs_to Organization 现在,仅当用户设置Organization=User.Organization时,才允许用户创建新的会员卡(请注意,具有更高权限的用户没有此限制) 目前我处理控制器上的所有事情,但是我正

我只是不确定方法。事实上,我遇到过这种情况:

User belongs_to Organization
Organization has_many User

Organization has_many MembershipCard
MembershipCard belongs_to Organization
现在,仅当用户设置Organization=User.Organization时,才允许用户创建新的会员卡(请注意,具有更高权限的用户没有此限制)

目前我处理控制器上的所有事情,但是我正在考虑制作一个验证器,确保
Organization==current\u user.Organization(UserSession.find.user)


这是个好主意吗?这对我来说很好,但我真的很害怕没有好的理由就很难打破MVC模式。

这是一个让你思考的完美时间/地点/例子,不仅仅是(authlogic)。
用宝石做这件事简直是儿戏。您只需在以下列表中指定规则:

看看如何一起使用这些宝石

====更新问题信息后:=======

“CanCan的灵感来源于声明性授权和宙斯盾”——

我查了一下,你会如何用CanCan定义这样一个规则,页面上有一个片段

您仍然需要根据您的环境对其进行定制,但它应该可以引导您找到解决方案


请参阅关于使用CanCan。

这是一个让您思考的完美时间/地点/示例,不仅仅是(authlogic)。
用宝石做这件事简直是儿戏。您只需在以下列表中指定规则:

看看如何一起使用这些宝石

====更新问题信息后:=======

“CanCan的灵感来源于声明性授权和宙斯盾”——

我查了一下,你会如何用CanCan定义这样一个规则,页面上有一个片段

您仍然需要根据您的环境对其进行定制,但它应该可以引导您找到解决方案


请参阅关于使用CanCan。

我已经在使用CanCan进行授权,但我不知道是否支持类似于if\u属性的内容。你把代码放在哪里?它是否放在声明性授权使用的特定文件中?哇,你为我做了这项工作,真的很感谢,这超出了我的预期。很明显,完全回答我的问题。Np,我很高兴能帮上忙。如果你有一些游戏项目正在进行,喜欢去看看,你可以详细介绍一下你的个人资料[:谢谢,我正在与一些人合作一个用Unity3D构建的小项目,但我们仍处于头脑风暴阶段。当我有东西给你看时,我肯定会这么做;)我已经在使用cancan进行授权,但我不知道是否支持类似于if_属性的东西。你把代码放在哪里?它放在使用的特定文件中吗通过声明性授权?哇,你为我做了这项工作,真的非常感谢,这比我预期的要多。而且完全回答了我的问题。Np,我很高兴我能帮上忙。如果你有一些游戏项目正在进行,我很乐意去看看,你可以详细介绍一下你的个人资料[:谢谢,我正在与一些人合作一个用Unity3D构建的小项目,但我们仍处于头脑风暴阶段。当我有东西给你看时,我肯定会做;)
authorization do
  role :user do
    has_permission_on :membership_cards, :to => :create do
      if_attribute :organization => is {user.organization}
    end
  end
end
class Ability
  def initialize(user)
    user ||= User.new # guest user (not logged in)
    can :create, MembershipCard do |card|
      card.organization.user == user
    end
  end
end