【发布时间】:2021-08-04 14:56:32
【问题描述】:
我对 Rails (6.1.4) 很陌生。我尝试按照初学者的教程进行操作,效果很好。
然后我尝试稍微调整一下以适应我自己的目标,即简单地对“实验室”执行 CRUD 操作。效果也很好。
然后我想用这个“实验室”小应用程序尝试 ActiveAdmin 和 Devise 和 Cancancan。
看到它的安装和运行如此简单,我印象深刻。但后来我意识到每个用户,无论是什么角色(我有管理员角色、参考角色和咨询角色)都可以访问 /admin/laboratoires。
我希望只有具有管理员角色的用户才能访问 /admin/laboratoires。其他用户只能访问 /laboratoires。
我认为我可以通过这种方式简单地完成我的能力.rb 模型(我尝试了引用角色):
# frozen_string_literal: true
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin_role?
can :manage, :all
elsif user.referent_role?
can [:read, :create, :update, :destroy], Laboratoire
cannot [:read, :create, :update, :destroy], ActiveAdmin::Page, name: "Laboratoire", namespace_name: "admin"
elsif user.consultation_role?
can [:read], Laboratoire
end
end
但它似乎不起作用,我似乎不明白这里的东西。
有谁知道我写错了什么?也许我需要提供一些其他信息,但我不确定是否准确理解哪些是相关的,简单地说......
==== 更新 2021-08-05: 好吧,我实际上认为我刚刚找到了自己问题的答案。我想我对授权和身份验证感到困惑。我刚刚意识到 ActiveAdmin 的参数 config.authentication_method 可以帮助我处理这一点。所以我在应用控制器中写了一个方法,通过这个参数调用ActiveAdmin来防止非admin用户访问ActiveAdmin。它现在似乎工作得很好:)。
【问题讨论】:
标签: ruby-on-rails activeadmin cancancan