簡體   English   中英

如果登錄的用戶角色為“關聯”,則阻止javascript函數生成刪除操作鏈接

[英]Prevent javascript function from generating delete action links if a logged in user role is Associate

我有兩個不同的角色,管理員和助理。

管理員應該能夠刪除產品,而助理應該不能刪除產品。

我知道如何通過不顯示已登錄的關聯用戶的“刪除操作”鏈接來在“視圖”中進行配置。 但是,我還實現了onkeydown ajax搜索功能,該功能返回jsonobjects列表。 這些json-objects是與搜索字符串匹配的產品對象的列表,然后立即在視圖中建立標記。 這是通過單個javascript函數完成的。

問題在於,無論當前登錄的用戶角色如何,現在都對其進行了硬編碼以生成刪除操作鏈接。 因此,以某種方式,我需要修改我的javascript函數,以便如果當前登錄的用戶是關聯用戶,則它不會生成刪除動作鏈接。

這是我的功能:

     function searchProduct() {

        var searchWord = $('#searchString').val();                                

        $.ajax({
            url: '/Product/TextChangeEventSearch?searchString=' + searchWord,
            type: 'GET',
            datatype: 'json',
            contenttype: 'application/json',
            success: function (data) {

                $('.table tr:gt(0)').detach();
                $.each(data, function (i, item) {
                    $('.table').append('<tr>' +
                            '<td>' + item.Name + '</td>' +
                            '<td>' + item.Status + '</td>' +
                            '<td>' + item.Genre + '</td>' +
                            '<td>' + '<a href=/Product/Edit/' + item.Value + '>Edit</a> |' +
                            '<a href=/Product/Details/' + item.Value + '>Details</a> |' +
                            '<a href=/Product/Stock/' + item.Value + '>Stock</a> |' +
                            '<a href=/Product/Discount/' + item.Value + '>Discount</a> |' +                            
                            '<a href=/Product/Delete/' + item.Value + '>Delete</a>' +
                            '</td>' +
                            '</tr>'
                        );
                });
            }
        });
    }

在視圖中由此觸發:

<div class="form-group">
            @Html.TextBox("searchString", "", new { onkeydown = "searchProduct();", onkeyup = "searchProduct();", onkeypress = "searchProduct();"})
            <input type="submit" value="Search" class="btn btn-default" onclick="searchProduct()"/>
        </div>

控制器中的“我的服務器”代碼:

public JsonResult TextChangeEventSearch(string searchString)
    {
        var products = _productRepository.GetAll().ToList();            
        var result = products.Where(p => p.Name.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) >= 0).OrderByDescending(x => x.Status).ThenBy(y => y.Name);


        var jsonList = result.Select(p => new
        {
            Name = p.Name,
            Status = p.Status,
            Genre = p.Category.Name,
            Value = p.Id.ToString(),
            Warehouse = p.Stock
        });


        return Json(jsonList.ToList(), JsonRequestBehavior.AllowGet);
    }

我認為我需要訪問javascript函數中當前登錄的用戶角色。 然后,如果它是使用此功能的關聯用戶,則可以在該功能中添加一個if語句,以防止它在視圖中生成刪除操作鏈接。

我下一步該去哪里? 任何想法,解釋和幫助將不勝感激。

可能是您可以在頁面上的一個隱藏字段中呈現當前用戶的角色,然后使用該字段的值來決定是否應顯示“刪除”按鈕。

@{
    Layout = Model.Layout;
    var isAssociate = Context.User.IsInRole("Associate"); //This is indicative and one of the approach of getting user role information at the client side. You can have your own mechanism to get the user's role information at the client side so that you can use it in your javascript.
}
    <input type="hidden" value="@isAssociate"/>

並且您的javascript調用將如下所示。

    function searchProduct() {

                var searchWord = $('#searchString').val();                                
                var isAssociate = $('#isAssociate').val();

                $.ajax({
                    url: '/Product/TextChangeEventSearch?searchString=' + searchWord,
                    type: 'GET',
                    datatype: 'json',
                    contenttype: 'application/json',
                    success: function (data) {

                        $('.table tr:gt(0)').detach();
                        $.each(data, function (i, item) {
                            var htmlContent = '<tr>' +
                                    '<td>' + item.Name + '</td>' +
                                    '<td>' + item.Status + '</td>' +
                                    '<td>' + item.Genre + '</td>' +
                                    '<td>' + '<a href=/Product/Edit/' + item.Value + '>Edit</a> |' +
                                    '<a href=/Product/Details/' + item.Value + '>Details</a> |' +
                                    '<a href=/Product/Stock/' + item.Value + '>Stock</a> |' +
                                    '<a href=/Product/Discount/' + item.Value + '>Discount</a> ';
                        if(isAssociate == "false")
                       {
                             htmlContent += |' + '<a href=/Product/Delete/' + item.Value + '>Delete</a>'
                       }

                       htmlContent += '</td>' + '</tr>'           
                       $('.table').append(htmlContent);
                });
            }
       }
});

注意:在這里,我假設您已經找到了一種識別用戶角色的機制,並且可以對其進行存儲,以便可以在視圖中對其進行訪問。 如果您沒有此功能,則需要找出解決方法。

我相信這會對您有所幫助。

謝謝並恭祝安康,

切坦·蘭帕里亞

您走在正確的軌道上。 js需要知道! 您可以將data屬性添加到輸入中,例如:

<input data-is-admin="false" ....>

然后在js中檢查此屬性。 並且您可能會想要授權服務器上的任何刪除。

使用JavaScript獲取數據后,您可以使用在線if語句僅顯示管理員的刪除按鈕:

'...' + ( userRole == 'Admin' ? '[Delete button HTML]' || '') + '...'

已經有一段時間了,但是很多周后我又回到了這個問題,我像這樣解決了它:

在視圖頂部:

@{
    ViewBag.Title = "Index";
    var isAdmin = Context.User.IsInRole("Admin");    
}

JavaScript函數:

function searchProduct() {

            var searchWord = $('#searchString').val();            
            var isAdmin = "@isAdmin";




            $.ajax({
                url: '/Product/TextChangeEventSearch?searchString=' + searchWord,
                type: 'GET',
                datatype: 'json',
                contenttype: 'application/json',
                success: function (data) {

                    $('.table tr:gt(0)').detach();
                    $.each(data, function (i, item) {
                        var htmlContent = '<tr>' +
                                    '<td>' + item.Name + '</td>' +
                                    '<td>' + item.Status + '</td>' +
                                    '<td>' + item.Genre + '</td>' +
                                    '<td>' + '<a href=/Product/Edit/' + item.Value + '>Edit</a> | ' +
                                    '<a href=/Product/Details/' + item.Value + '>Details</a> | ' +                                    
                                    '<a href=/Product/Discount/' + item.Value + '>Discount</a> ';                        
                        if (isAdmin.toString() === "True")
                        {
                            htmlContent += '| ' + '<a href=/Product/Delete/' + item.Value + '>Delete</a>'
                        }


                        htmlContent += '</td>' + '</tr>'           
                        $('.table').append(htmlContent);
                    });
                }
            });
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM