Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中基于路由的角色管理_Ruby On Rails_Ruby On Rails 4_Permissions_Roles_Rails Routing - Fatal编程技术网

Ruby on rails rails中基于路由的角色管理

Ruby on rails rails中基于路由的角色管理,ruby-on-rails,ruby-on-rails-4,permissions,roles,rails-routing,Ruby On Rails,Ruby On Rails 4,Permissions,Roles,Rails Routing,我正在构建一个用户角色管理系统。它有一个权限模型和一个角色模型角色具有多个权限和用户具有多个角色。所以我们需要渗透和角色的积垢 我正在考虑另一种方法。在我的应用程序中获取所有路由并从中创建权限怎么样??基本上,权限是指向路径的权限,我们在路由中有一个路径列表 我能够在我的应用程序中获得所有路由,如 Rails.application.routes.routes.to_a 但我看不到这种方法在任何地方得到实施。你对此有何看法?请分享你的建议。提前谢谢 如果要基于每条路由施加权限,请在applic

我正在构建一个用户角色管理系统。它有一个
权限
模型和一个
角色
模型<代码>角色具有多个权限和
用户具有多个角色
。所以我们需要
渗透
角色
的积垢

我正在考虑另一种方法。在我的应用程序中获取所有路由并从中创建权限怎么样??基本上,权限是指向路径的权限,我们在路由中有一个路径列表

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

Rails.application.routes.routes.to_a

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

如果要基于每条路由施加权限,请在
application\u controller
中为每个角色创建方法,以检查用户是否对其拥有相应的权限并重定向或诸如此类。在所需控制器和操作的操作之前,在
上使用它。

您检查了吗?有了这个gem,您可以在多个模型中定义角色并处理禁止的资源

我认为您所描述的是一个完美的用例。使用它,您可以定义一个能力类

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
class PostsController

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

这使得添加新角色变得很困难,因为您必须为此编写代码。不是吗?如果你想进入每个路线级别的访问控制是的。如果有新角色出现,你只需在你想限制的动作前加入。。只需稍加调整,就不必为单个角色编写单独的方法。这使得我每次添加路由时都要编写代码。我希望管理员在没有开发人员帮助的情况下从UI中选择权限。如何允许用户在角色中添加/编辑权限,并使用cancan将其分配给用户?或者,我如何从用户端生成能力?@mukesh如果模型中有权限字段,即使在另一个表中,您也可以使用此字段并与cancan结合,就像Bart Jedrocha之前告诉您的那样。谢谢您的回复@Bart。但是除了编码之外,我如何从用户端添加功能呢?我希望管理员可以从检查列表中选择一些权限,并将其保存为角色,以便为用户分配这些角色。是否可以使用cancancan?cancancan专门围绕特定用户的能力展开。如何定义这些能力取决于您。也就是说,您可以轻松地调整它以满足您的需要。例如,在能力类中,如果user.role.permissions.include?(:whatever)
决定用户可以访问哪些资源,则可以执行以下操作。