c # mvc - авторизовать функцию ajax - PullRequest
0 голосов
/ 15 мая 2018

У меня есть код, который вызывает действие «Удалить» из моего FriendApi, но я бы хотел его авторизовать.Я санкционировал действие Удалить в Api, пользователи, которые не являются администраторами, все еще могут «удалять» данные, но когда я обновляю страницу, данные все еще там.Как я могу авторизовать это и убедиться, что, если кто-то не является администратором и нажимает «Удалить», ему предлагается войти в систему с учетной записью, обладающей привилегиями для выполнения этого действия.Вот мой Api и моя страница Index, где вызывается Api.

// DELETE: api/FriendApi/5
        [Authorize(Roles = "Admin")]
        [ResponseType(typeof(FriendModel))]
        public IHttpActionResult DeleteFriendModel(int id)
        {
            FriendModel friendModel = db.friends.Find(id);
            if (friendModel == null)
            {
                return NotFound();
            }

            db.friends.Remove(friendModel);
            db.SaveChanges();

            return Ok(friendModel);
        }

Вот мой индекс.Поэтому моя главная цель - сделать ее видимой для роли «Менеджер», но только роль «Администратор» может удалить материал.

@model List<MVCLab5._1.Models.FriendModel>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<table class="table table-bordered table-responsive table-hover" id="myTable">
    <thead>
        <tr>
            <td>Friend ID</td>
            <td>Name</td>
            <td>City</td>
            <td></td>
        </tr>
    </thead>
    <tbody>
        @{
            //int i = 0;

            foreach (var obj in Model)
            {

                <tr>
                    <td>@obj.FriendId</td>
                    <td>@obj.Name</td>
                    <td>@obj.Place</td>
                    <td>
                        @if (User.IsInRole("Admin") || User.IsInRole("Manager"))
                        {

                        <button data-friend-id="@obj.Id" class="btn btn-default js-delete">Delete</button>
                        }

                        @*@Html.ActionLink("Delete", "DeleteFriend", new { id = obj.Id }, new { @class = "btn btn-default" })*@
                @if (User.IsInRole("Admin") || User.IsInRole("Manager"))
                {
                        @Html.ActionLink("Edit", "EditFriend", new { id = obj.Id }, new { @class = "btn btn-default" })
                }
                    </td>


                </tr>
                //i++;

            }
        }
    </tbody>
</table>

@section scripts{
    <script>
        $(document).ready(function () {
            var table = $('#myTable').DataTable();
            $("#myTable .js-delete").on("click", function () {
                var button = $(this);
                $.ajax({
                    url: "/api/FriendApi/" + button.attr("data-friend-id"),
                    method: "DELETE",
                    success: function (result) {
                        console.log(result)
                        table.row(button.parents("tr")).remove().draw();
                    }
                });
            });
        });
    </script>
}

1 Ответ

0 голосов
/ 15 мая 2018

Это зависит от того, какой пользователь вошел в систему. Я не знаю, какой подход к аутентификации вы используете.

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

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