使用Ruby on Rails管理不同的角色

时间:2016-10-16 19:00:42

标签: ruby-on-rails roles

我正在使用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_,如何使用它来完成我需要的工作?

提前致谢。

1 个答案:

答案 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模型中的多态关联。