функция редактирования и удаления только для зарегистрированных пользователей - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь использовать вспомогательный тег current_user из rails, чтобы позволить пользователям, которые подписаны в EDIT, и УДАЛИТЬ объекты, которые они создали во время входа в систему.

Мне показалось, что это работало на прошлой неделе, но теперь я вернулся к своему приложению, и оно прекратилось. Я также реализовал ту же функцию для моей функции редактирования на моей странице показа, но она не работает. Может кто-нибудь сказать мне, где я иду не так, у меня есть правильный синтаксис для этой функции для работы? Заранее спасибо:)

Мой файл index.html.erb:

 <div class="row justify-content-around p-3">
  <% @hairstyles.each do |hairstyle| %>
    <div class="card m-3">
      <div>
      <%= cl_image_tag hairstyle.photo, width: 300, height: 200, crop: :fill, class: 'card-image'%>
      </div>
      <div class="card-body">
        <div class="card2">
          <div class="card-body-inner1 transbox">
            <h5 class="card-title"><%= link_to hairstyle.name, hairstyle_path(hairstyle) %></h5>
            <p>Location: <%= hairstyle.location%></p>
          </div>

          <div class ="card-body-inner2 d-flex">
            <p> Likes</p>
            <p> Share</p>

          <% if hairstyle.user == current_user%>
           <p> <%= link_to "Delete", hairstyle_path(hairstyle), method: :delete, data: { confirm: "Are you sure?" }%></p>
          <%end %>
          </div>         
      </div>


      </div>
    </div>
  <% end %>
</div>

Мой контроллер:

def create
    @hairstyle = Hairstyle.create(hairstyle_params)
    # @hairstyle.save ? (redirect_to hairstyle_path(@hairstyle)):(render 'new')
    @hairstyle.user = current_user
    if @hairstyle.save!
      redirect_to hairstyle_path(@hairstyle)
    else
      render 'new'
    end
  end

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

Можете ли вы указать, что вы имеете в виду, что он перестал работать, пожалуйста?Может быть, вы еще не вошли в систему?

Также для этой функции вы должны использовать инструмент авторизации, такой как pundit .Потому что сейчас вы просто скрываете соответствующие ссылки на действия в представлении.Но если пользователь угадывает URL-адрес и набирает его в браузере, он все равно может удалять или редактировать объекты других пользователей.Pundit, благодаря своей концепции политики, избегает именно этого.

0 голосов
/ 23 апреля 2019

В зависимости от вашей проблемы, я бы порекомендовал использовать action_access, прост в реализации и легко назначать права на редактирование, удаление или обновление для каждого пользователя, которого вы имеете.Ссылка: https://github.com/matiasgagliano/action_access

0 голосов
/ 23 апреля 2019

Подсказка о вашем коде, используйте cancancan gem для сушки кода, а также его помощь в централизации вашего "безопасного доступа"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...