首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为不同的用户类型创建基于规则的访问控制单元

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

Stack Overflow用户
提问于 2017-03-27 15:05:41
回答 2查看 301关注 0票数 0

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

我用设计作为我的登录/向上操作。我只有一个模型用户,但是每个用户都有不同的user_type。我有八种不同身份验证级别(整数)的唯一用户类型。

这些是限制用户如何与站点交互的因素:

  1. 身份验证级别较高的用户可以以较低的身份验证级别功能执行其相关用户类型,即访问其相关控制器并执行其他操作。
  2. 不是每个具有相同身份验证级别的用户类型都可以访问相同的控制器:user1auth_level = 2可以访问控制器C1,但是具有相同auth_level = 2user2可以访问控制器C2。换句话说,他们在同一层次上做着不同的工作。
  3. 是否有创业板来实施这些措施?我研究过CanCan,它不能满足我的需求。
  4. 如果没有gem,您建议采用什么方法/设计来实现这样的访问控制单元?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-31 12:04:57

自从几天前我提出这个问题以来,有一段时间,我一直在思考和评估可用的宝石,它们适合我的用途,但我找不到任何simpleeasy-to-uselightweight将其导入到我的应用程序中;所以我接受了这一斗争,并编写了我自己的创业板出入控制股,它满足了我在问题+问题中的限制。它非常轻巧,而且很容易使用,而且适用于任何目的。

在这个创业板中,每个请求要么通过,要么不传递,访问规则可以涵盖rails应用程序的任何方面。下面是规则集的一个示例,有关更多细节,您可以查看这里提供的文档。

代码语言:javascript
复制
# 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
票数 0
EN

Stack Overflow用户

发布于 2017-03-27 15:31:14

我建议您使用路由约束(http://guides.rubyonrails.org/routing.html#advanced-constraints)来实现控制器访问。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43050008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档