rails,cancancan和某些仅在生产中无法识别权限的项目

时间:2018-03-27 13:47:48

标签: ruby-on-rails cancancan

所以我有一个模型,Lodge,我有两个行为不正常的访问级别,但只在生产中(这使得调试它成为熊),并且仅在Lodge的某些实例上。使用全新的数据库转储,在生产环境中运行时,本地计算机上不会发生这种情况。

super_admin角色中,有少数887个实体返回"未授权"当我尝试直接加载网址时,我收到404错误。

以下是展示问题的示例小屋:

2.4.0 :083 > @l = Lodge.find_by_combined('246B')
  Lodge Load (1.5ms)  SELECT  "lodges".* FROM "lodges" WHERE "lodges"."combined" = $1 LIMIT $2  [["combined", "246B"], ["LIMIT", 1]]
   => #<Lodge id: 444, name: "Apachedotte", lodge_number: "246", designator: "B", combined: "246B", insignia: "Tree", chartered_on: nil, url: nil, status: "Superceded 1955", created_at: "2017-01-15 21:02:49", updated_at: "2017-04-29 10:33:51", council_id: nil, slug: "246b-apachedotte", name_translation: nil, membership: nil, membership_year: nil, membership_details: nil, featured_issue_id: nil, no_known_issues: nil, renumbered_on: nil, renumbering_detail: nil, facebook_url: nil, pronunciation: nil, instagram_url: nil, twitter_url: nil, phonetic_spelling: nil, history: nil, notes: nil> 

展示行为的所有小屋(保存一个)都有&#34; 46&#34;在他们的lodge_number值。异常值是168B(但不是168A,很有趣)。只有JUST 46的两个小屋(例如不是46x或x46)不会表现出这种行为。

超级管理员权限:

Canard::Abilities.for(:super_admin) do
  can :manage, :all
end

Admin privs:

Canard::Abilities.for(:admin) do
  includes_abilities_of :user
  can :manage, Annotation
  can :manage, BorderType
  can :manage, Council
  can :manage, IssueSet
  can :manage, Issue
  can :manage, Lodge, editorships: { editor: user  }
  can :manage, Manufacturer
end

非超级用户角色由editorships模型进行身份验证,但由于这会在绕过的级别上持续存在于相同的实例上,因此它似乎是另一种情况。

编辑是一个很好的:通过用户(作为编辑)和住宿之间的关系。我们进行了直通设置,以便将来对每个编辑进行更细粒度的访问。

最初有404错误,但是通过删除editor_id为零的任何编辑来解决这个问题。

以及展示此内容的实体列表(寄宿编号+指示符或组合值):

146A
168B
246A
246B
246C
246D
346A
346B
446A
460A
461A
462A
463A
464A
465A
466A
467A
467B
468A
469A
546A
  • Ruby 2.4
  • Rails 5.1.2
  • PostgreSQL 9.6
  • Centos 6.x用于生产,macOS 发展

0 个答案:

没有答案