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