asp.net-MVC根据角色编辑GridDate

时间:2012-06-18 08:18:38

标签: asp.net-mvc-3 datagrid role

我有一个数据网格来显示员工的特殊情况,但我需要在哪里设置逻辑 如果Role = Manager,则显示所有员工,如果Role = Employee仅显示属于他的1个数据。以下是我向员工展示的代码。我设法向所有员工展示。需要帮助为员工设置过滤器。

查看

@model IEnumerable<SealManagementPortal_3._0.Models.VOC_CUSTODIAN>
@{
    ViewBag.Title = "List of Custodians";
}
<h2>Index</h2>
<p> 
   @if (User.IsInRole("Manager"))
{
    @Html.ActionLink("Create New", "Create")
}
</p>
<script type="text/javascript">
    jQuery(document).ready(function () {
        jQuery("#list2").jqGrid({
            url: '@Url.Action("GridData", "Custodian")',
            datatype: 'json',
            mtype: 'GET',
            colNames: ['Agent ID', 'Branch', 'Unique ID', 'Custodian Name', /*'NRIC No', 'E-Mail', 'Contact No', 'Mobile No',*/'Role', 'Details', 'Edit', 'Delete'],
            colModel: [
                { name: 'Agent ID', index: '', width: 10, align: 'left' },
                { name: 'Branch', index: '', width: 10, align: 'left' },
                { name: 'Unique ID', index: '', width: 10, align: 'left' },
                { name: 'Custodian Name', index: '', width: 10, align: 'left' },          
                {name: 'Role', index: '', width: 10, align: 'left' },
                { name: 'Details', index: '', width: 5, align: 'left' }
                , { name: 'Edit', index: '', width: 5, align: 'left' }
                ,{ name: 'Delete', index: '', width: 5, align: 'left' }
                ],    
            pager: jQuery('#pager2'),
            rowNum: 10,            
            sortname: 'Id',
            sortorder: "desc",
            viewrecords: true,
            autowidth: true,            
            caption: 'Custodians List'
        });

    }); 
</script>

@using (Html.BeginForm())
{
    <table id="list2" class="scroll" cellpadding="0" cellspacing="0"></table>
    <div id="pager2" class="scroll" style="text-align:center;"></div>
}

控制器

     public ActionResult GridData (string sidx, string sord, int page, int rows)
            {             
                int pageIndex = Convert.ToInt32(page) - 1;
                int pageSize = rows;
                int totalRecords = db.VOC_CUSTODIAN.Count();
                int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);   
                var jsonData = new
                               {
                                   total = totalPages,
                                   page = page,
                                   records = totalRecords,
                                   rows = (from custo in db.VOC_CUSTODIAN.AsEnumerable()
                                          select new
                                                 {
                                                     id = custo.Idx,
                                                     cell = new string []
                                                            {
                                                                custo.StaffId, 
                                                                custo.Branch,
                                                                custo.UniqueId,
                                                                custo.Name,
                                                                custo.Role,
                                                                ("<a href='"+ @Url.Action("Details", "Custodian") +"/"+ custo.Idx+ "'>DETAILS</a>"),
                                                                ("<a href='"+ @Url.Action("Edit", "Custodian") +"/"+ custo.Idx+ "'>EDIT</a>"),
                                                                ("<a href='"+ @Url.Action("Delete", "Custodian") +"/"+ custo.Idx+ "'>DELETE</a>")
}
                                                 }).ToArray()
                               };
                return Json(jsonData, JsonRequestBehavior.AllowGet);
            }

1 个答案:

答案 0 :(得分:0)

您的视图不应该处理逻辑,您的Controller Action应该。您应该可以使用Roles.InUserInRole执行类似的操作:

if (!Roles.IsUserInRole(User.Identity.Name, "Managers"))
{
  jsonData.total = 1;
  jsonData.page = 1;
  jsonData.records = 1;
  jsonData.rows = jsonData.rows.Where(x => x.id = currentUserId).ToArray() 
}

return Json(jsonData, JsonRequestBehavior.AllowGet);