Управление различными ролями с помощью Ruby on Rails

Я кодирую приложение о беспроводной сети, используя Ruby on Rails. Это приложение состоит из разных ролей: Admin, Employee и Visitor.

Часть посетителя уже была сделана моим коллегой после руководства Майкла Хартла (в основном пользователь был заменен посетителем ), и теперь я должен сделать все остальное.

К сожалению, она не использовала ни придумывания, ни других драгоценных камней, подобных ей, и я не могу разрушить всю ее работу, поэтому я не могу использовать ни одного из них.

В этих приложениях есть такие классы, как 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

Теперь ... как я могу определить CRUD различные операции над MACaddress или другими классами в соответствии с ролью пользователя?

Я создал даже _current_employee_, как я могу использовать его, чтобы делать то, что мне нужно?

Заранее спасибо.

ruby-on-rails,roles,

0

Ответов: 1


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).

Вероятно, вы бы захотели определить имя пользователя role_to как полиморфную ассоциацию в модели macaddress.

рубин-на-рельсы, роли,
Похожие вопросы