2014-06-09 4 views
5

Ich habe ein Problem mit den Rollen Sync_gateway. Mein sync_function löst einen missing role Fehler bei requireRole("adminSync");.Sync_gateway couchbase requireRole

Ich bin mit Benutzer admin1 zugreifen, die wie folgt konfiguriert ist:

"name": "admin1", 
    "all_channels": {}, 
    "passwordhash_bcrypt": "**************", 
    "explicit_roles": { 
    "adminSync": 1 
    }, 
    "rolesSince": { 
    "adminSync": 1 
    } 

Auch habe ich die Rolle konfiguriert als:

{ 
    "name": "adminSync", 
    "admin_channels": { 
    "CH_HORAS": 1, 
    "CH_PERSONAS": 1, 
    "CH_PROYECTOS": 1 
    }, 
    "all_channels": { 
    "CH_HORAS": 1, 
    "CH_PERSONAS": 1, 
    "CH_PROYECTOS": 1 
    } 
} 

Jede Idee dieser Fehler ??

Danke.

Antwort

1

Re, ich herausgefunden habe, was falsch war,

Die variablen realUserCtx.roles ist eine Karte, so nach der requireRole (..), die zwei Arrays vergleichen muss, ist es immer Rückkehr falsch.

Also musste ich den Quellcode von src/channels/sync_runner.go ändern, um diese Karte vor dem Vergleich in ein Array zu konvertieren.

function mapToArray(mapObject){ 
     var _array = []; 
     if(mapObject){ 
      for (var property in mapObject) { 
       _array.push(property); 
      } 
     } 
     return _array; 
    } 

dann ..

function requireRole(roles) { 
    ... 
    if (!anyInArray(mapToArray(realUserCtx.roles), roles)) 
    } 

Wenn Sie mehr Erklärungen benötigen, können Sie mich in einer privaten Nachricht kontaktieren. Viel Glück

+0

Danke, es funktioniert! – pikap

4

Ich arbeite an dem gleichen Problem. Ich sah in sync_gateway Quellcode src/Kanäle/sync_runner.go und requireRole Definition gefunden, die lautet:

function requireRole(roles) { 
      if (!shouldValidate) return; 
      roles = makeArray(roles); 
      if (!anyInArray(realUserCtx.roles, roles)) 
       throw({forbidden: "missing role"}); 
    } 

Trotzdem habe ich versucht, diesen Teil des Codes in meiner Sync-Funktion hinzuzufügen:

console.log(Array.isArray(realUserCtx.roles)); 

..und es kehrte falsch zurück. realUserCtx.roles ist kein Array, sondern eine Funktion und ich weiß nicht, was in diesem Funktionskörper ist.

Ich hoffe, es kann helfen, die Lösung zu finden.