簡體   English   中英

將鍵/值數組中的對象與另一個對象(鍵/值)進行比較

[英]Comparing objects from key/value array with another object (Key/value)

所以這是我目前遇到麻煩的情況。

我想通過一個功能檢查用戶是否有權查看頁面。

所以我有一個帶有鍵/值的數組,我在其中存儲權限。

{"authorities":[{"role":"gebruikersbeheer"},{"role":"kijken"},{"role":"plannen"}]};

存儲在service.currentUser ,可以使用service.currentUser.authorities進行調用。

我有一個功能:

hasPermission: function (permission) {
            var role = { "role" : permission };
            for(perm in service.currentUser.authorities)
            {
                var test = service.currentUser.authorities[perm];
                if(test === role)
                {
                    return (!!(service.currentUser) && true);
                }
            }
            return false;
        }

我創建了test變量以調試其值。 permission參數的值為'gebruikersbeheer'。

現在,我想將perm鍵的值與role進行比較,並檢查它是否為真。 現在,我已經在互聯網上進行搜索,而我發現的解決方案對我來說既不可行,也不可行。

當我開始調試時,我的perm有一個整數值。 為什么不是密鑰名稱? (必須是“角色”)此外,當我在roletest變量上使用Watch時,它們是完全相同的,但仍然無法比較它們並得出true

(此時不要在意return語句。)我也無法修改數組。 這樣,Spring Security會將其返回。

有什么(更簡單的方法)檢查authorities包含role 它可能是重復的,但我找不到適合自己特定情況的任何東西。

干杯。

您當前正在用另一個對象檢查一個對象,最好是用該字符串檢查該字符串,下面顯示了相同功能的一個小例子,但使用了數組中的some方法;

 var currentUser = {"authorities":[{"role":"gebruikersbeheer"},{"role":"kijken"},{"role":"plannen"}]}; function hasPermission(permission) { return currentUser.authorities.some(function(v){ return v.role === permission; }); } alert("Have permission? "+ hasPermission("gebruikersbeheer")) 

service.currentUser.authorities是一個數組,這就是為什么要在for(perm in service.currentUser.authorities)獲得perm的整數的原因。

另一個問題是您不能使用===來比較對象中的所有屬性(包括原型屬性),因此您需要顯式比較屬性的值...或創建自定義函數來比較對象。

您可以嘗試:

     hasPermission: function (permission) {
        var role = { "role" : permission };
        for(perm in service.currentUser.authorities)
        {
            var test = service.currentUser.authorities[perm];
            if(test["role"] === role["role"])
            {
                return (!!(service.currentUser) && true);
            }
        }
        return false;
    }

希望這可以幫助,

由於您只關心是否存在某些內容,因此可以使用Array.Some函數。 它仍然循環遍歷數組,但是在遇到第一個為true的實例時將停止。 您的方法基本上已經在做同樣的事情,但是用這種方法更干凈一點,因為它使用了數組的實際元素(而不是索引)。

hasPermission: function (permission) {
    var authArray = service.currentUser.authorities;

    var hasAuth = authArray.some(function(kvp) {
        return kvp.role == permission; //function to determine a match
    });
    return hasAuth; 
}

暫無
暫無

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

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