5

の役割に問題がありますSync_gateway。でエラーsync_functionがスローmissing roleされrequireRole("adminSync");ます。

次のように構成されたユーザー admin1 でアクセスしています。

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

また、役割を次のように構成しています。

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

このエラーのアイデアはありますか??

ありがとう。

4

2 に答える 2

4

私は同じ問題に取り組んでいます。sync_gateway ソース コードsrc/channels/sync_runner.goを調べたところ、次のような requireRole 定義が見つかりました。

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

それにもかかわらず、同期関数にコードのこの部分を追加しようとしました:

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

..そしてそれはfalseを返しました。 realUserCtx.rolesは配列ではなく関数であり、この関数本体の中身がわかりません。

解決策を見つけるのに役立つことを願っています。

于 2014-06-09T19:31:26.050 に答える
1

Re、私は何が間違っていたのかを知りました、

変数realUserCtx.rolesはマップであるため、2 つの配列を比較する必要があるrequireRole(..)に従って、常に false を返します。

そのため、比較の前に src/channels/sync_runner.go のソース コードを変更して、このマップを配列に変換する必要がありました。

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

それから..

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

さらに説明が必要な場合は、プライベート メッセージでご連絡ください。幸運を

于 2014-06-11T21:39:48.383 に答える