Реализовать пользовательский интерфейс для управления группами / ролями пользователей в asp.net mvc - PullRequest
0 голосов
/ 28 февраля 2019

Я разрабатываю приложение CRUD в ASP.NET MVC, я уже внедрил часть безопасности, которая работает с AD, и теперь я хочу упростить назначение разрешения varius пользователям.Все группы и пользователи хранятся в базе данных, они связаны этим отношением: enter image description here

Ниже моего текущего представления это не работает, это только графика.

enter image description here

Вот мой код просмотра:

<body>
<div class="container">
    <br />
    <table class="table table-responsive table-bordered">
        @{
            //inizialize my ef context
            dev_labelsEntities db = new dev_labelsEntities();
            //get all users stored in the db
            var users = from u in db.Users
                        orderby u.username
                        select new
                        {
                            u.username
                        };
            //get all groups from the db
            var groups = from g in db.Groups
                         orderby g.group_name
                         select new
                         {
                             g.group_name
                         };
            <tr>
                <th>Username</th>
                @foreach (var item in groups)
                {
                    <td>@Html.DisplayFor(model => item.group_name)</td>
                }
            </tr>
            foreach (var item in users)
            {

                int count = 1;
                <tr>
                    <td>@Html.DisplayFor(model => item.username)</td>
                    @foreach (var itemG in groups)
                    {
                      //for distinguish the varius checkbox i use the name
                      //of the group and a generic count which indicates
                      //the row number                           
                      <td>@Html.CheckBox(""+itemG.group_name+"_"+count)</td>
                    }
                </tr>
                count++;
            }
        }            
     </table>
   </div>
 </body>

Окончательный результат, который я ожидаю, таков: когда пользователь устанавливает флажок, операция вставки вызова вТаблица UserGrops, поэтому пользователь может иметь более одной группы (только если пользователь принадлежит группе «Администраторы», все остальные флажки должны быть отключены), тогда как при снятии флажка с пользователя удаляется из таблицы соответствующий пользователь с определенным разрешением (например,пользователь Jonh принадлежит к группам компьютеров и принтеров, я снимаю флажок, соответствующий группе принтеров, эта запись будет удалена из таблицы, и Jonh сможет получить доступ только к части компьютера).

Если кто-тоЯ буду признателен за любые советы или советы по его реализации.

Лев

РЕДАКТИРОВАТЬ

Я добавил к своему представлению этот скрипт, поскольку @Amine предлагает:

$(document).ready(function () {
    $('.chkclass').click(function () {
        var getchkid = $(this).attr('id');
        var isChecked = $('#' + getchkid).is(':checked');
        if ($('#' + getchkid).is(':checked') == true) {

            // the value that i need
            var username = $(this).attr('username');
            var groupname = $(this).attr('groupname');

            //ajax for calling my action medthod
            $.ajax({
                type: 'Post',
                url: '/UserGroups/ManagePermission',
                cache: false,
                dataType: 'Json',
                data: { usr: username, grp: groupname },
                //success: function (data) {

                //},
                //error: function (xhr, ajaxOptions, thrownError) {
                //    alert(thrownError);
                //}
            })
        }
    });
});

Метод получает правильное значение, но после простого теста это происходит

До:

enter image description here

После:

enter image description here

Почему это поведение?

1 Ответ

0 голосов
/ 28 февраля 2019

Используйте это в HTML

<input type="checkbox"   class="chkclass"  username="@item.username"  groupname="@itemG.group_name" id="@count"  />

вместо

<td>@Html.CheckBox(""+itemG.group_name+"_"+count)</td>
  • Имя пользователя и имя группы будут данными, которые будут переданы действию
  • Все флажки будутиметь тот же класс, который будет использоваться в действии jquery
  • id будет использовать счетчик, чтобы найти отмеченный флажок в

сценарии, в котором вы можете использовать что-то вроде этого

$(document).ready(function () {   


    $('.chkclass').click(function () {   

        var getchkid = $(this).attr('id');   
        var isChecked = $('#' + getchkid).is(':checked');   
  if ($('#' + getchkid).is(':checked') == true) {

  // to be send to your call
    var username = $(this).attr('username');
    var groupname = $(this).attr('groupname');

  //here put your call ajax to your action
  $.ajax({
            type: "POST",
            url: //your URL
            data: '{}', // your Data
  ....
   }   
    });   

});
...