2014-06-09 13 views
5

Mam problem z rolami Sync_gateway. Mój sync_function zgłasza błąd missing role pod adresem requireRole("adminSync");.Sync_gateway couchbase requireRole

mam dostępu z Admin1 użytkownika, który jest skonfigurowany jak następuje:

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

Również mam rola skonfigurowany jako:

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

Any idea tego błędu ??

Dzięki.

Odpowiedz

1

Re dowiedziałem się, co się stało,

Zmienna realUserCtx.roles znajduje się mapa, więc zgodnie z requireRole (..) który musi porównać dwie tablice, zawsze powrót fałszywy.

Potrzebowałem zmienić kod źródłowy src/channels/sync_runner.go, aby przekonwertować tę mapę na tablicę przed porównaniem.

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

następnie ..

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

Jeśli potrzebujesz więcej wyjaśnień można skontaktować się mnie w prywatnej wiadomości. Powodzenia

+0

Dzięki to działa! – pikap

4

Pracuję nad tym samym problemem. Spojrzałem w sync_gateway kodu źródłowego src/kanały/sync_runner.go i znaleźć definicję requireRole, czyli:

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

Niemniej jednak, starałem się dodać tę część kodu w mojej funkcji Sync:

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

..i to zwróciło fałsz. RealUserCtx.roles nie jest tablicą, ale funkcją i nie wiem, co znajduje się w tym ciele funkcji.

Mam nadzieję, że pomoże to w znalezieniu rozwiązania.

Powiązane problemy