基于路由的路径中的角色管理

时间:2015-04-08 12:46:16

标签: ruby-on-rails ruby-on-rails-4 permissions roles rails-routing

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

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

我能够获得我的应用程序中的所有路径,如

Rails.application.routes.routes.to_a

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

3 个答案:

答案 0 :(得分:0)

如果要基于每个路由强制执行权限,请为application_controller中的每个角色创建方法,以检查用户是否具有相应的权限并重定向或以其他方式。在before_action所需的控制器和操作上使用它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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