Управление пользователями. UserController

Создание контроллера UserContoller

Последнее обновление: 31.10.2015

Чтобы пользователи могли авторизоваться, их, естественно, надо сначала внести в базу данных. Поэтому первым делом надо создать общий интерфейс для управления пользователями и их информацией. Сюда входит регистрация новых пользователей, изменение информации о них, удаление и т.д. Причем полный доступ к управлению будет иметь только администратор, а модераторы и исполнители смогут только просматривать общие сведения о пользователях.

Итак, добавим в папку Controllers новый контроллер UserController, который будет для начала иметь следующее содержание:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using HelpDeskTrain.Models;

namespace HelpDeskTrain.Controllers
{
   [Authorize(Roles = "Администратор, Модератор, Исполнитель")]
    public class UserController : Controller
    {
        private HelpdeskContext db = new HelpdeskContext();

        [HttpGet]
        public ActionResult Index()
        {
            var users = db.Users.Include(u => u.Department).Include(u=>u.Role).ToList();
            return View(users);
        }
    }
}

Далее мы добавим другие методы, для которых будет установлен разный доступ по ролям, поэтому мы указываем атрибут Authorize не на уровне контроллера, а на уровне отдельных действий. Поскольку просматривать пользователей могут все роли кроме роли 'Пользователь', то все эти роли мы и указываем в атрибуте.

Используя метод Include(u => u.Department), мы добавляем к определению пользователей и информацию о связанных с ними отделов.

Теперь добавим представление. Это будет строго типизированное представление Index.cshtml, использующее мастер-страницу по умолчанию, которое будет выводить всех пользователей:

@model IEnumerable<HelpDeskTrain.Models.User>

@{
    ViewBag.Title = "Список пользователей";
}

<h2>Список пользователей</h2>

<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
         @if (HttpContext.Current.User.IsInRole("Администратор"))
        {
        <th>
            @Html.DisplayNameFor(model => model.Login)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Password)
        </th>
         }
        <th>
            @Html.DisplayNameFor(model => model.Position)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DepartmentId)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.RoleId)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        @if (HttpContext.Current.User.IsInRole("Администратор"))
        {
        <td>
            @Html.DisplayFor(modelItem => item.Login)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Password)
        </td>
        }
        <td>
            @Html.DisplayFor(modelItem => item.Position)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Department.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Role.Name)
        </td>
        @if (HttpContext.Current.User.IsInRole("Администратор"))
        {
        <td>
            @Html.ActionLink("Редактировать", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Удалить", "Delete", new { id=item.Id })
        </td>
        }
    </tr>
}
</table>

Поскольку предполагается, что только админ может видеть логины и пароли пользователей, то пишем проверку на статус пользователя: @if (HttpContext.Current.User.IsInRole("Администратор")). И если это админ, то ему будут отображены эти поля, иначе же он их не увидит.

То же самое по отношению к ссылкам "Редактировать" и "Удалить". Так как только администратор может выполнять такие функции, то они будут доступны только для него. Потом мы еще установим соответствующие фильтры авторизации для этих действий.

Также обратите внимание на еще один момент: так как в контроллере мы использовали метод Include для присоединения связанных данных из другой таблицы, то в представлении мы можем получить эти данные, например, item.Department.Name

Если на этапе создания БД вы, как и я, добавили первого пользователя - администратора, то можно войти в систему под этим пользователем и просмотреть список пользователей (где пока один пользователь).

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850