<commit_before># encoding: utf-8
# Definiciones de permisos para CanCanCan.
#
# Abilidades agregadas a las default:
#
#   - modificar: funciona como :update, pero sólo para instancias de modelo. Relacionado con rolify
class Ability
  include CanCan::Ability

  attr_reader :basicos, :perfiles, :recursos

  def initialize(usuario = nil)
    @usuario = usuario || Usuario.new

    @perfiles = [ Perfil, Horizonte, Analitico, Adjunto, Erosion, Ubicacion,
                  Humedad, Paisaje, Pedregosidad, Limite, Consistencia,
                  Estructura, Busqueda ]
    @basicos =  [ Grupo, Fase, Color, Proyecto, Serie, Equipo ]
    @recursos = @perfiles + @basicos

    alias_action  :autocomplete_usuario_nombre,
                  :autocomplete_usuario_email,
                  :autocomplete_grupo_descripcion,
                  :autocomplete_fase_nombre,
                  :autocomplete_reconocedores_name,
                  :autocomplete_etiquetas_name,
                  :autocomplete_serie_nombre,
                  :autocomplete_serie_simbolo,
                  :autocomplete_color_rgb,
                  :autocomplete_color_hvc,
                  :seleccionar,
                  :derivar,
                  :almacenar,
                  :exportar,
                  :procesar,                              to: :read
    alias_action  :editar_analiticos, :update_analiticos, to: :update

    if @usuario.admin?
      administrador
    else
      if @usuario.autorizado?
        autorizado
      # Si no tiene permisos globales, ver de qué recursos es miembro
      elsif @usuario.persisted?
        miembro
      else
        invitado
      end
    end
  end

  # Lógica de cada rol
  private

    # FIXME Que no sea el único que puede acceder a los datos de usuarios
    def administrador
      can :manage, :all
    end

    def autorizado
      can :manage, Usuario, id: @usuario.id
      can :read, recursos
      can :create, recursos
      can :manage, perfiles, usuario_id: @usuario.id
      can :manage, [ Equipo, Proyecto, Serie ], usuario_id: @usuario.id
      can :update, Equipo, miembros: { id: @usuario.id }<commit_msg>Revisar permisos<commit_after># encoding: utf-8
# Definiciones de permisos para CanCanCan.
#
# Abilidades agregadas a las default:
#
#   - modificar: funciona como :update, pero sólo para instancias de modelo. Relacionado con rolify
class Ability
  include CanCan::Ability

  attr_reader :basicos, :perfiles, :recursos

  def initialize(usuario = nil)
    @usuario = usuario || Usuario.new

    @perfiles = [ Perfil, Horizonte, Analitico, Adjunto, Erosion, Ubicacion,
                  Humedad, Paisaje, Pedregosidad, Limite, Consistencia,
                  Estructura, Busqueda ]
    @basicos =  [ Grupo, Fase, Color, Proyecto, Serie, Equipo ]
    @recursos = @perfiles + @basicos

    alias_action  :autocomplete_usuario_nombre,
                  :autocomplete_usuario_email,
                  :autocomplete_grupo_descripcion,
                  :autocomplete_fase_nombre,
                  :autocomplete_reconocedores_name,
                  :autocomplete_etiquetas_name,
                  :autocomplete_serie_nombre,
                  :autocomplete_serie_simbolo,
                  :autocomplete_color_rgb,
                  :autocomplete_color_hvc,
                  :seleccionar,
                  :derivar,
                  :almacenar,
                  :exportar,
                  :procesar,                              to: :read
    alias_action  :editar_analiticos, :update_analiticos, to: :update

    if @usuario.admin?
      administrador
    else
      if @usuario.autorizado?
        autorizado
      # Si no tiene permisos globales, ver de qué recursos es miembro
      elsif @usuario.persisted?
        miembro
      else
        invitado
      end
    end
  end

  # Lógica de cada rol
  private

    # FIXME Que no sea el único que puede acceder a los datos de usuarios
    def administrador
      can :manage, :all
    end

    # TODO Debería incluir llamar a `miembro`?
    def autorizado
      can :manage, Usuario, id: @usuario.id
      can :read, recursos
      can :create, recursos
      can :manage, perfiles, usuario_id: @usuario.id
      can :manage, [ Equipo, Proyecto, Serie ], usuario_id: @usuario.id
      can :update, Equipo, miembros: { id: @usuario.id }
{'fraction_non_alphanumeric': 0.07109879963065559, 'fraction_numerical': 0.0004616805170821791, 'mean_word_length': 2.0665251238499645, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5356088', 'n_tokens_mistral': 1420, 'n_tokens_neox': 1400, 'n_words': 345}