首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问控制实现

访问控制实现
EN

Stack Overflow用户
提问于 2011-06-27 20:07:22
回答 2查看 42关注 0票数 1

我为我的ROR应用实现了ACL。我有一个存储用户权限的access变量。

它包含具有每个用户数组值的散列。

第一个数组元素是控制器名称,第二个元素是带有操作名称的数组。

代码语言:javascript
复制
access = {
           'user' => [
             ['drivers', ['show','delete','update']],
             ['index',   ['edit','destroy','view']]
           ],

           'administrator' => [
             ['users', ['show','edit','delete']],
             ['index', ['delete','index','show']]
           ]
         }

我想检查用户是否有权访问特定的控制器和操作

代码语言:javascript
复制
user       = 'administrator'
controller = 'index'
action     = 'delete'

我这样做了

代码语言:javascript
复制
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

也许存在更优雅的方式来存储相似的数据,或者更好的方式来访问它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-27 20:26:41

我建议使用CanCanStonewall这样的系统,而不是自己动手。

这两个方法都允许您询问“此用户是否可以在此对象上执行此操作?”

我自己的插件Stonewall + StonewallActionProtection可以自动对CRUD操作进行访问检查。

票数 1
EN

Stack Overflow用户

发布于 2011-06-27 20:22:41

这里有一种更优雅的方式:https://github.com/ezmobius/acl_system2

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

https://stackoverflow.com/questions/6492593

复制
相关文章

相似问题

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