Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 如何为不同的用户类型创建基于规则的访问控制单元_Ruby On Rails_Ruby_Authentication_Software Design - Fatal编程技术网

Ruby on rails 如何为不同的用户类型创建基于规则的访问控制单元

Ruby on rails 如何为不同的用户类型创建基于规则的访问控制单元,ruby-on-rails,ruby,authentication,software-design,Ruby On Rails,Ruby,Authentication,Software Design,我正在尝试为我的应用程序实现一个基于角色的访问控制单元,但由于我的限制,我不知道如何实现它 我使用Desive进行登录/注册操作。我只有一个模型用户,但每个用户都有不同的用户类型。我有八种不同身份验证级别(整数)的唯一用户类型 以下是用户如何与网站互动的限制: 具有较高身份验证级别的用户可以使用较低身份验证级别的功能执行其相关用户类型,即访问其相关控制器和执行操作 并非所有具有相同身份验证级别的用户类型都可以访问同一控制器:user1withauth_level=2可以访问控制器C1,但是use

我正在尝试为我的应用程序实现一个基于角色的访问控制单元,但由于我的限制,我不知道如何实现它

我使用Desive进行登录/注册操作。我只有一个模型用户,但每个用户都有不同的
用户类型
。我有八种不同身份验证级别(整数)的唯一用户类型

以下是用户如何与网站互动的限制:

  • 具有较高身份验证级别的用户可以使用较低身份验证级别的功能执行其相关用户类型,即访问其相关控制器和执行操作

  • 并非所有具有相同身份验证级别的用户类型都可以访问同一控制器:
    user1
    with
    auth_level=2
    可以访问控制器
    C1
    ,但是
    user2
    具有相同的
    auth_level=2
    可以访问控制器
    C2
    。另一种说法是,他们在同一水平上做着不同的工作

  • 有没有什么gem可以实现这些东西?我已经调查过它不能满足我的需要

  • 如果没有gem,您建议采用什么方法/设计来实现这种访问控制单元

  • 我建议您使用路由约束()来实现控制器访问


    使用
    request.env[“warden”].authenticate
    可以在约束类中的
    matches?
    方法中验证当前用户的请求。如果您使用
    request.env[“warden”],请验证
    您甚至会将用户重定向到登录页面,或显示相应的错误消息(取决于您的设置)。

    因为我几天前问了这个问题,有一段时间我想了解并评估适用于我的目的的可用gem,但我找不到任何
    简单的
    易于使用
    轻量级
    足以将其导入我的应用程序;因此,我接受了这场斗争,并编写了我自己的gem,名为,它满足了我在问题中的限制+它非常轻量级,易于使用,并且适用于任何用途

    在这个gem中,每个请求要么通过要么不通过,访问规则可以覆盖rails应用程序的任何方面。以下是规则集的示例,有关更多详细信息,请参阅中提供的文档


    请阅读“”和链接页面。您没有向我们充分介绍您的环境或需求,因此您的问题很广泛。您要求我们为您提供非现场资源的建议,这也是离题的。相反,你需要做研究和尝试,然后决定什么最适合你,写代码,然后,如果你有问题,问一个关于这个问题的具体问题;
    # config/initializers/acu_rules.rb
    Acu::Rules.define do
      # anyone makes a request could be count as everyone!
      whois :everyone { true }
    
      whois :admin, args: [:user] { |c| c and c.user_type == :ADMIN.to_s }
    
      whois :client, args: [:user] { |c| c and c.user_type == :CLIENT.to_s }
    
      # any request that doesn't match with a rule will be denied by default; 
      # but this can be configured to not to!
    
      # the default namespace
      namespace do
        controller :home, except: [:some_secret_action] do
          allow :everyone
        end
        controller :home do
          allow [:admin, :client], on: [:some_secret_action]
        end
      end
    
      # the admin namespace
      namespace :admin do
        allow :admin
    
        controller :contact, only: [:send_message] do
          allow :everyone
        end
    
        controller :contact do
          action :support {
            allow :client
          }
        end
      end
    end