rails 中基于路由的角色管理

Routes based role management in rails

我正在构建一个用户角色管理系统。它有一个 Permission 模型和一个 Role 模型。 Role has_many permissionsUser has_many roles。所以我们需要 permsissionsroles 的 CRUD。

我正在考虑一种不同的方法。如何获取我的应用程序中的所有路由并从中创建权限?基本上权限是去路径的权限,我们在路由中有一个路径列表。

我能够在我的应用程序中获取所有路由,例如

Rails.application.routes.routes.to_a

但我看不到这种方法在任何地方得到实施。你对此有何看法?请分享您的建议。提前致谢。

如果您想在每个路由的基础上施加权限,请为 application_controller 中的每个角色创建方法,检查用户是否对其具有相应的权限并重定向或其他。在 before_action 个您想要的控制器和操作上使用它..

你检查过https://github.com/ryanb/cancan了吗?使用此 gem 您可以在多个模型中定义角色并处理禁止的资源

我认为您描述的是 cancancan 的完美用例。有了它,你定义了一个能力class

class Ability
  include CanCan::Ability

  def initialize(user)
    # See the wiki for details:
    # https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities
    if user.admin?
        can :manage, :all
    elsif user.contributor?
        can :manage, [Post]
    else
        can :read, :all
    end
  end
end

然后可用于控制控制器级别的访问

class PostsController < ActionController::Base
  load_and_authorize_resource
end

这将允许管理员贡献者访问所有操作(因为管理员可以管理所有资源,而贡献者可以管理帖子)而其他用户将只能访问 read 操作(索引、显示)。您当然也可以在资源级别控制访问权限。