我为我的ROR应用实现了ACL。我有一个存储用户权限的access变量。
它包含具有每个用户数组值的散列。
第一个数组元素是控制器名称,第二个元素是带有操作名称的数组。
access = {
'user' => [
['drivers', ['show','delete','update']],
['index', ['edit','destroy','view']]
],
'administrator' => [
['users', ['show','edit','delete']],
['index', ['delete','index','show']]
]
}我想检查用户是否有权访问特定的控制器和操作
user = 'administrator'
controller = 'index'
action = 'delete'我这样做了
if access[user]
access[user].each do |acc|
if acc[0].include? controller
if acc[1].include? action
puts "User '#{user}' have access to controller '#{controller}' and action '#{action}'"
end
end
end
end也许存在更优雅的方式来存储相似的数据,或者更好的方式来访问它?
发布于 2011-06-27 20:26:41
我建议使用CanCan或Stonewall这样的系统,而不是自己动手。
这两个方法都允许您询问“此用户是否可以在此对象上执行此操作?”
我自己的插件Stonewall + StonewallActionProtection可以自动对CRUD操作进行访问检查。
发布于 2011-06-27 20:22:41
这里有一种更优雅的方式:https://github.com/ezmobius/acl_system2
https://stackoverflow.com/questions/6492593
复制相似问题