<commit_before>class Ability
  include CanCan::Ability
  # FIXME разобраться с тестированием Ability в rspec

  def initialize(user)
    user ||= User.new   # guest user (not logged in)

    if user.roles.count == 0
      can :read, :all #for guest without roles
      cannot :show, User
    else  #зарегистрированные пользователи хотя бы с одной ролью могут:
      can :read, User   # видеть подробности о других пользователях

      if user.has_role? :user
        can :view_document, Document  # просматривать файл с документомu.
      end

      if user.has_role? :author
        can :create, Document
        can [:update, :destroy], Document, :owner_id => user.id  # документ владельца
        can :manage, [Directive, Term]
        can :view_document, Document  # просматривать файл с документом
        can :edit_document, [Document]  # может брать исходник документа
      end
      if user.has_role? :keeper
        can :edit_document_place, Document  # может изменять место хранения документа
      else
        cannot :edit_document_place, Document
      end

      if user.has_role? :owner  # владелец процесса
        can [:update, :create], Document
        can :manage, [Directive, Term]
        can :manage, [BproceBapp, BproceIresource]
        can :update, Bproce, :user_id => user.id  # процесс владельца
        can :manage, BusinessRole  # роли в процессе владельца
      end

      if user.has_role? :analitic
        can :manage, [Bproce, Bapp, BusinessRole, Document, BproceBapp, Term]
        can :manage_tag, [Bproce] # может редактировать теги процессов
        can :edit_document, [Document]  # может брать исходник документа
      end

      if user.has_role? :admin
        can :assign_roles, User   # администратор может изменять роли доступа пользователям
        can :manage, [User, Workplace, Bapp, Iresource, Term]
        can :manage_tag, [Bproce, Bapp] # может редактировать теги процессов, приложений
      end

      if user.has_role? :security
        can :assign_roles, User   # администратор доступа может изменять роли доступа пользователям
      end
    end

  end
end<commit_msg>fix: исправлены права на докуметы, теперь работает ограничение :edit_document_place<commit_after>class Ability
  include CanCan::Ability
  # FIXME разобраться с тестированием Ability в rspec

  def initialize(user)
    user ||= User.new   # guest user (not logged in)

    if user.roles.count == 0
      can :read, :all #for guest without roles
      cannot :show, User
    else  #зарегистрированные пользователи хотя бы с одной ролью могут:
      can :read, User   # видеть подробности о других пользователях

      if user.has_role? :user
        can :view_document, Document  # просматривать файл с документомu.
      end

      if user.has_role? :author
        can :create, Document
        can [:update, :destroy], Document, :owner_id => user.id  # документ владельца
        can :manage, [Directive, Term]
        can :view_document, Document  # просматривать файл с документом
        can :edit_document, [Document]  # может брать исходник документа
      end
      if user.has_role? :keeper
        can :edit_document_place, Document  # может изменять место хранения документа
      else
        cannot :edit_document_place, Document
      end

      if user.has_role? :owner  # владелец процесса
        can [:update, :create], Document
        can :manage, [Directive, Term]
        can :manage, [BproceBapp, BproceIresource]
        can :update, Bproce, :user_id => user.id  # процесс владельца
        can :manage, BusinessRole  # роли в процессе владельца
      end

      if user.has_role? :analitic
        can [:update, :create], Document
        can :manage, [Bproce, Bapp, BusinessRole, BproceBapp, Term]
        can :manage_tag, [Bproce] # может редактировать теги процессов
        can :edit_document, [Document]  # может брать исходник документа
      end

      if user.has_role? :admin
        can :assign_roles, User   # администратор может изменять роли доступа пользователям
        can :manage, [User, Workplace, Bapp, Iresource, Term]
        can :manage_tag, [Bproce, Bapp] # может редактировать теги процессов, приложений
      end

      if user.has_role? :security
        can :assign_roles, User   # администратор доступа может изменять роли доступа пользователям
      end
    end

  end
end
{'fraction_non_alphanumeric': 0.07308664674787405, 'fraction_numerical': 0.0004596644449551827, 'mean_word_length': 2.7843478260869565, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5247192', 'n_tokens_mistral': 1458, 'n_tokens_neox': 1589, 'n_words': 442}