我正在使用Ruby on Rails编写有关无线网络的应用程序。此应用程序由不同的角色组成:管理员,员工和访客。
访客部分已经由我的同事按照Michael Hartl的指南制作(基本上用户已被访客取代),现在我必须这样做休息。
不幸的是,她既没有使用设计也没有使用与之类似的其他宝石,我也无法拆除她的所有作品,所以我不能使用它们。
在这个应用程序中有一些类,如MACaddress或VLAN,访问者和员工/管理员都可以对它们进行一些操作,但当然这些操作是不同的(根据角色的不同权限)。
我的主要问题来了。 考虑这样的事情:
class MacaddressesController < ApplicationController
before_action :logged_in_visitor, only: [:create, :destroy]
before_action :correct_visitor, only: [:destroy,:update]
def create
@macaddresses = current_visitor.macaddresses.build(macaddresses_params)
if @macaddresses.save
flash[:success] = "mac address created!"
redirect_to visitor_path(session[:visitor_id],:act => 'mynetwork')
else
@macaddresses = current_visitor.macaddresses.all
@visitor = current_visitor
render 'visitors/myNetwork'
end
end
def destroy
@macaddresses.destroy
redirect_to visitor_path(session[:visitor_id],:act => 'myNetwork',:del=>'true')
end
def update
if @macaddresses.update_attributes(macaddresses_params)
redirect_to visitor_path(session[:visitor_id],:act => 'myNetwork',:del=>'true')
else
@macaddresses = current_visitor.macaddresses.all
@visitor=current_visitor
render 'visitors/myNewtork2'
end
end
现在......如何根据用户的角色在MAC地址或其他类上定义CRUD不同的操作?
我甚至创建了_current_employee_,如何使用它来完成我需要的工作?
提前致谢。
答案 0 :(得分:0)
如果您正在嵌套这样的路线:
'/visitors/visitor_id/macaddresses'
你可以像这样获得用户角色类的实例
def find_user_role
params.each do |name, value|
next unless name =~ /(.+)_id$/
user_role_model = $1.classify.constantize rescue nil
@current_user_role = user_role_model.find(value) if user_role_model
end
end
然后你可以做
@current_user_role.macaddresses.build(macaddress_params).
您可能希望将belongs_to用户定义为macaddress模型中的多态关联。