0

私は、ユーザーの役割をチェックする角度jsファクトリメソッドにpermission関数を書いています。ユーザーオブジェクトにそのような役割がある場合、結果は真でなければなりません。そうでなければ偽を返します。角度jsの別の配列に配列の値が存在するかどうかを確認する方法はありますか?

administrator:true 
company_admin:true 
registered:true 
manager:true 
contact:"987654321" email:"[email protected]" name:"Anand" 

とアプリモデル工場での私の許可機能は次のとおりです:私のユーザーオブジェクトがある 1.を複数がある場合:

$appModel.checkPermission:function($role, $requireAll) { 
      var data = $rootScope.authUser; 
      if (angular.isArray($role)) { 
       angular.forEach($role, function (value, key) { 
        var hasRole = $appModel.checkPermission(value); //Recursive Function 
        if (hasRole && !$requireAll) { 
         return true; 
        } else if (!hasRole && $requireAll) { 
         return false; 
        } 
       }); 
       return $requireAll; 
      } else { 
       if (data.hasOwnProperty($role) && data[$role]) 
        return true; 
      } 
      return false; 
     } 

私がチェックしています以下のような場合があります。その配列内の 'required all'条件でロールを実行し、次にユーザーオブジェクトに存在する複数のロールをチェックし、trueを返します。そうでない場合はfalseを返します。その配列内に複数の役割がある場合、それらの中に複数の役割をチェック

$result= $appModel.checkPermission([registered, company_admin], true); 

2.は、ユーザーオブジェクトに存在し、任意の役割が一致した場合は、その後、そうでない場合はfalseを返すtrueを返します。

$result= $appModel.checkPermission([administrator, company_admin,manager,agent], false); 

3.その配列内の単一の役割がある場合は、その役割は、ユーザーオブジェクトに存在するチェックし、その役割が一致した場合は、その後、そうでない場合はfalseを返すtrueを返します。

$result= $appModel.checkPermission(register, false); 

上記のコードはチェック単一の役割のために罰金を実行しているが、「すべての必要な」をかいない状態「のすべてを必要と」でチェックし、複数の役割の場合には、それが正常に動作し、falseを返しません。

答えて

0

forEachに似ている代わりに、returnを使用して、AngularJSのforEachから抜け出すことはできません。 MDNから

例外をスローする以外のforEach()ループを停止または中断する方法はありません。

あなたの最初のreturn true後のループは、まだ実際にあなたの例では、あなたが見ているfalseの文である、あなたのreturn $requireAll;に蚊帳の外に落下、確立される内側のreturn文を引き起こしていない、に運んでいます。

これは、各return文の前にデバッグを配置し、returnの後に引き続き発射することで確認できます。

someeveryを使用することで、私はforEachを使用しないように、あなたのロジックを書き直し:

var results = $role.map($appModel.checkPermission); 
return requireAll 
    ? results.every(function(item) {return item;}) 
    : results.some(function(item) {return item;}) 
} else { 
    return (data.hasOwnProperty(role) && data[role]); 
} 

次のスニペットは、このコードは単にJavaScriptで作業を示しています。役割が存在しない場合は

var roleChecker = function(role, requireAll) { 
 
    var data = { 
 
    administrator: true, 
 
    company_admin: true, 
 
    registered: true, 
 
    manager: true, 
 
    }; 
 
    
 
    if(Object.prototype.toString.call(role) === '[object Array]') { 
 
    var results = role.map(roleChecker); 
 
    
 
    return requireAll ? results.every(function(item) {return item;}) 
 
     : results.some(function(item) {return item;}) 
 
    } else { 
 
    return (data.hasOwnProperty(role) && data[role]); 
 
    } 
 
    
 
}; 
 

 
console.log(roleChecker(['administrator', 'manager'], false)); 
 
console.log(roleChecker(['administrator', 'company_admin', 'fake_role'], true)); 
 
console.log(roleChecker(['administrator', 'company_admin'], true)); 
 
console.log(roleChecker('administrator', false)); 
 
console.log(roleChecker('fake_role', false));

+0

また、あなたの最後の行 '場合(data.hasOwnProperty(役割)&&データ[役割])は'失敗します。私は条件付きチェックを返すことでこれを解決しました – user2340824

+0

ありがとうございました!それは非常にうまくいった。私は最後の二日以来それに対処するために非常に忙しかった。あなたは私のために多くの時間を節約しました。ありがとう、トン。 @ user2340824 – Hemant

+0

お手伝いして本当にうれしくてうれしいです! – user2340824

関連する問題