浏览 4782 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-05
我想给我自己写的系统加入基于角色的权限管理 用的是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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-05
自己写个脚本扫描Controller目录下所有文件,用正则提取下文件名和action名,转换下大小写不就可以了嘛,自己动手写写:)
|
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |
发表时间:2007-04-06
it works !
俺正则表达式不熟,又是一个学习的机会 谢谢dennis_zane朋友 |
|
返回顶楼 | |
发表时间: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,数据更准确一些 |
|
返回顶楼 | |
发表时间: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还有这么两个方法,受教 |
|
返回顶楼 | |