`
danoyang
  • 浏览: 8490 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

怎么方便的遍历整个app里面的controllers,和actions

阅读更多

我想给我自己写的系统加入基于角色的权限管理

用的是rails recipes 里面推荐的方法 32号

把所有的controllers里面的actions放到一张rights里面

但是构建rights表的时候难道要手动 把 controller 名字以及 action的名字一个一个复制到表里面去?
而且以后controllers actions增加我也不用太麻烦

有没有简便点的办法让我可以通过irb 构造这张表?

类似
theapp.controllers.each do |contoller|
  controller.actions.each do |action|
    Right.create(:controller=> controller.name,:action=> action.name)
  end
end
分享到:
评论
5 楼 dennis_zane 2007-04-06  
danoyang 写道
修改了一下 把controller 的controller_path 取出来,并且直接使用的action_methods来取得所有的actions

贴一下完整的代码文件放在scripts目录下面 addrights.rb

require File.dirname(__FILE__) + '/../config/boot'
require File.dirname(__FILE__) + '/../config/environment'
#加载rails环境,主要是model

controllers = Array.new
path="#{RAILS_ROOT}/app/controllers/"
Dir.new(path).entries.each do |f|
  if !f.index('.rb').nil? and f.index('.rb')>0

    require  path+f.to_s
#所有controllers没有自动加载,这里手动加载一下
    controller=File.open(path+f.to_s)
    s=controller.read
    /class\s(.*)\s\</.match(s)
    controller_name=$1.to_s
    controllers << controller_name
  end
end
controllers.each {|c| puts c}

controllers.each do |name|
  (eval(name)).action_methods.each do |action| 
    Right.create(:controller=>(eval(name)).controller_path,:action=> action)
  end
end
#调用controller类的controller_path和action_methods,数据更准确一些


原来controller还有这么两个方法,受教
4 楼 danoyang 2007-04-06  
修改了一下 把controller 的controller_path 取出来,并且直接使用的action_methods来取得所有的actions

贴一下完整的代码文件放在scripts目录下面 addrights.rb

require File.dirname(__FILE__) + '/../config/boot'
require File.dirname(__FILE__) + '/../config/environment'
#加载rails环境,主要是model

controllers = Array.new
path="#{RAILS_ROOT}/app/controllers/"
Dir.new(path).entries.each do |f|
  if !f.index('.rb').nil? and f.index('.rb')>0

    require  path+f.to_s
#所有controllers没有自动加载,这里手动加载一下
    controller=File.open(path+f.to_s)
    s=controller.read
    /class\s(.*)\s\</.match(s)
    controller_name=$1.to_s
    controllers << controller_name
  end
end
controllers.each {|c| puts c}

controllers.each do |name|
  (eval(name)).action_methods.each do |action| 
    Right.create(:controller=>(eval(name)).controller_path,:action=> action)
  end
end
#调用controller类的controller_path和action_methods,数据更准确一些
3 楼 danoyang 2007-04-06  
it works !

俺正则表达式不熟,又是一个学习的机会


谢谢dennis_zane朋友
2 楼 dennis_zane 2007-04-05  
我试着写了下,应该可以了

 @controllers=Hash.new
      path="#{RAILS_ROOT}/app/controllers/"
      Dir.new(path).entries.each do |f|
         if !f.index('.rb').nil? and f.index('.rb')>0
        
         controller=File.open(path+f.to_s)
         s=controller.read
         /class\s(.*)\s\</.match(s)
         controller_name=$1.to_s
         actions=[]
         s.scan(/def\s(.*)\s/).each{ |action| actions<<(action[0]) }
         @controllers[controller_name]=actions
         controller.close
         end
      end
      
       @controllers.each_pair do |name, actions|
          actions.each do |action| 
          Right.create(:controller=>name,:action=> action)  
          end
       end
1 楼 dennis_zane 2007-04-05  
自己写个脚本扫描Controller目录下所有文件,用正则提取下文件名和action名,转换下大小写不就可以了嘛,自己动手写写:)

相关推荐

    Ionic-app.zip_app6189_guidetz9_ionic_ionic app网址_zip

    标题中的 "Ionic-app.zip" 很可能是一个包含整个 Ionic 项目源代码的压缩文件,方便开发者下载和部署。 描述中的 "ionic app controllers services" 提及了 Ionic 应用中的两个关键概念:Controllers 和 Services。...

    Laravel开发-laravel-controllers

    在本文中,我们将深入探讨Laravel框架中的控制器(Controllers),这是Laravel开发的重要组成部分。Laravel是一个优雅且强大的PHP Web应用程序开发框架,它提供了一系列工具和最佳实践,使得Web应用的构建变得更加...

    教你使用viewcontrollers以及创建展示图片

    资源名称:教你使用view controllers以及创建展示图片内容简介:通过教你制作一个上架应用 PicDecor来教你使用 view controllers以及创建展示图片本章教大家开发一个应用 PicDecor,这个应用可以允许用户从相册上传...

    appAPP.rar

    标题中的"appAPP.rar"是一个压缩包文件,通常用于存储多个相关文件,便于传输和管理。这个压缩包的内容是关于低代码Web应用程序构建方法的示例,特别关注使用ASP.NET Core 2.2开发的单页应用程序(SPA)。SPA是一种...

    AVR controllers_avr_

    AVR系列控制器以其高效能、低功耗和丰富的内置资源而受到广泛赞誉。"AVR controllers_avr_"这个标题可能指的是一个关于AVR微控制器的资源集合,可能是代码示例、教程或项目文件。 在"avr microcontrollers programs...

    PID controllers:theory design and tuning.rar

    PID控制器,全称为比例-积分-...总之,“PID controllers:theory design and tuning”是一份深入探讨PID控制器的珍贵资料,无论你是初学者还是经验丰富的工程师,都能从中获益匪浅,提升你的控制理论知识和实践能力。

    Extjs5官方可运行实例Ticket App

    Ticket App通常包含多个视图(views)、模型(models)、控制器(controllers)和存储(stores)。这些组件协同工作,提供了一个完整的用户界面,用于管理票务信息,如创建、编辑、删除和查看票务记录。 3. **视图...

    软件库最新开源app源码+后端源码

    在压缩包中的"小丫软件库后端 app源码"可能是一个具体的项目实例,包含了一系列文件和目录,如控制器(Controllers)、模型(Models)、视图(Views)、配置文件、路由定义、数据库脚本等。开发者可以通过阅读这些...

    kube-controllers-3.10.2.tar

    docker kube-controllers 镜像 使用方法: 1、保存到/tmp下 2、docker load -i /tmp/kube-controllers-3.10.2.tar 验证: docker images

    Control Panel - Game Controllers

    标题“Control Panel - Game Controllers”指的是Windows操作系统中的“控制面板”的游戏控制器部分,这是一个系统设置区域,用户可以在此管理、配置和测试与电脑连接的各种游戏设备,如游戏手柄、方向盘、摇杆等。...

    Ext3.2_Could_APP

    在移动设备上,用户体验至关重要,因此Ext3.2_Could_APP可能采用了响应式设计,确保应用在不同屏幕尺寸和操作系统上都能良好地显示和运行。此外,它可能还利用了触摸友好的控件和手势支持,以提供与原生应用类似的...

    node-limbo-controllers-resolver:磁悬浮控制器的自动发现规则

    接受的文件名和路径app/controllers/profile.js app/controllers/profileController.js app/controllers/profile_controller.js应用阶段的使用 ( new maglev . Application ( ) ) // default maglev conventions . ...

    Programming iOS 12: Dive Deep into Views, View Controllers, and Frameworks

    视图控制器(View Controllers)在iOS应用架构中扮演着中枢角色,它们管理一组视图并协调它们与模型和其它控制器之间的交互。UIViewController及其子类如UITableViewController、UINavigationController等,提供了...

    足球资讯APP-IOS源码

    源码中的核心文件夹“footballApp-master”很可能是项目的主要结构,包含着整个APP的源代码和资源文件。开发者通常会按照模块化的方式来组织代码,如:视图控制器(ViewControllers)、模型(Models)、视图(Views...

    Five Stages of Sliding Mode Controllers

    滑模控制的设计与分析过程可以被划分为几个阶段,每个阶段都有其独特的理论基础和应用方法。以下是根据提供的文件内容,对滑模控制器五个阶段的详细介绍: 第一阶段:一阶滑模控制(First Order Sliding Modes) ...

    swift-采用Swift开发实现漂亮和精确地在ViewControllers图片之间转换

    综上所述,使用Swift开发实现ViewControllers之间的图片转换涉及了多个方面,从ViewController生命周期的理解,到自定义动画的实现,再到与用户的交互和性能优化,都是开发者需要掌握的关键技能。通过实践和学习,你...

    Laravel开发-app-lark

    2. **初始化子应用程序**:在`app-lark`目录中,创建基本的Laravel项目结构,包括`Controllers`、`Models`、`Views`和`Config`等目录,以及必要的`.php`文件,如`routes.php`。 3. **配置路由**:在主应用程序的`...

    ember-proxy-controllers:将Ember.ObjectController和Ember.ArrayController提取为独立的插件

    // app/controllers/posts.js import ArrayController from 'ember-proxy-controllers/array' export default ArrayController . extend ( { // ... } ) // app/controllers/post.js import ObjectController ...

Global site tag (gtag.js) - Google Analytics