2016-06-15 3 views
0

В настоящее время я работаю с идентификатором CRUD. Но я могу взломать это. Я пытаюсь сделать так, чтобы вы могли ТОЛЬКО удалять, если вы вошли в систему.Запретить пользователям не удалять, если не войти в систему

Я попытался добавить if (User.Identity.IsAuthenticated) Но это не работает, он отправляет меня на страницу входа после того, как вы ввели страницу удаления. Это мой контроллер:

public ActionResult _RemoveItems() 
    { 
     var Items = db.CreatePosts.ToList(); 

     return PartialView(Items); 
    } 

    [HttpPost] 
    public ActionResult _RemoveItem(int Id) 
    { 
     if (HttpContext.User.Identity.IsAuthenticated) 
     { 
      CreatePost CreatePost = db.CreatePosts.Find(Id); 
      if (CreatePost != null) 
      { 
       db.CreatePosts.Remove(CreatePost); 
       db.SaveChanges(); 
      } 
     } 
     return RedirectToAction("Index", "Manage"); 
    } 

И это мое удаление

@Html.ActionLink("Slet", "_RemoveItem", "Home", new { @id = item.Id }, new { @class = "btn btn-danger" }) 

Что я делаю неправильно, так как я не могу сделать так, что вам нужно войти в систему, прежде чем вы можете зайти на страницу _RemoveItem

+0

Если ссылка существует в вашем * представлении *, то создается впечатление, что опция удаления разрешена, если она не вошла в систему. Из того, что вы опубликовали, не похоже, что у них будет возможность delete, но он перенаправит их обратно на страницу индекса без объяснения того, что произошло. Я не думаю, что вы можете запретить пользователю входить в контроллер удаления (без создания фильтра), но вы можете запретить им выполнять содержимое кода действия, если они не вошли в систему, но «Identity.IsUserAuthenticated» должен сделать трюк. –

+0

Проблема в том, что это не так почему? Я не знаю. Я неправильно сделал это неправильно, но где он должен быть помещен, чем, я не знаю. –

+0

Как и в стороне, ваше имя метода [HttpGet] - это _RemoveItem, а ваше имя метода [HttpPost] - _RemoveItems. – nocturns2

ответ

2

Вы можете использовать атрибут [Authorize], в строке выше ваш метод:

[Authorize] 
public ActionResult _RemoveItems() 

Для этого потребуется, чтобы кто-либо обращался к этому методу для входа в систему, периода.

Вы также можете добавить дополнительные параметры в атрибут Authorize, чтобы управлять тем, какие роли разрешены, и так далее.

Как и в:

[Authorize(Roles="SpecialRole, OtherRole")] 

В этом случае метод позволяет только пользователям в роли «SpecialRole» и/или роль «OtherRole», или в обеих ролях, чтобы иметь доступ.

+0

Попробовал [АВТОРИЗ] и эту «любопытную» работу. Проблема в том, что сейчас, говорит это, когда я пытаюсь удалить. http://i.imgur.com/xTsz9KI.png –

+0

@Code King, я прокомментировал ваше оригинальное сообщение о том, что может быть причиной исключения. – nocturns2

+0

Хорошо, я сделал это, почему я получил эту ошибку? Я не знаю, я удалил все это и написал его снова, и чем он сработал! Поместите [Авторизовать], чтобы он работал! Большое спасибо! Приятного дня! –

0

Если вы пытаетесь получить кнопку удаления на ваш взгляд исчезнет, ​​вы будете иметь, чтобы сделать некоторую дополнительную работу, чтобы это произошло:

В действии контроллера, который отображает ваш взгляд, вы как-то нужно передать, если пользователь вступил или нет (вы могли сделать это, на ваш взгляд, но вы не должны). Вы можете сделать это легко с помощью ViewBag или изменить свою модель, чтобы включить свойство, каким бы то ни было способом.

[HttpGet] public void Index() { 
    ViewBag.IsLoggedIn = HttpContext.User.Identity.IsAuthenticated; 
} 

По вашему мнению,

@(ViewBag.IsLoggedIn == false ? "" : Html.ActionLink("Slet", "_RemoveItem", "Home", new { @id = item.Id }, new { @class = "btn btn-danger" })) 

Это кажется, вы уже убедившись, что они вошли в и я сделал этот ответ так как это то, что вы, казалось, как вы хотели на основе [ мое потенциальное недоразумение] ваших комментариев.

+0

Но тогда пользователь все равно может ввести URL-адрес для удаления, чтобы он не был действительно безопасным. С помощью [AUTHORIZE] вы можете заблокировать доступ к действию ресурса/контроллера, если пользователь не аутентифицирован. –

+0

Но это все - он уже проверяет, проверены ли они. Если атрибут '[Authorize]' и свойство, которое он проверяет в OP, возвращают разные вещи, что, я думаю, не должно произойти. –

+0

Не то, что я ищу, так как пользователи, как Флориан рассказывает. Cann просто напишите url :) –