1

ユーザーを登録するには、次の方法があります。

// Registration method
exports.register = function(req, res) {
    var username = req.body.username,
        password = req.body.password,
        first = req.body.first;
        last = req.body.last;
        role = req.body.institution;

    nano = require('nano')('http://127.0.0.1:5984');
    var users = nano.use('_users');

    var user = {
                    "_id": "org.couchdb.user:" + username,
                    "name": username,
                    "type": "user",
                    "roles": [],
                    "password": password,
                    "realname": first + " " + last
                };

    users.insert(user, function(err, body) {
        if(err) {
            res.send(err.reason, err.status_code);
        } else {
            res.send(body, 200);
        }
    });
};

ご覧のとおり、「roles」配列に設定したいroleという変数があります。残念ながら、ご存知かもしれませんが、CouchDBでは管理者がロールを設定することしかできません。これで問題ありませんが、機関としての役割を使用しているので、登録ユーザーが登録している機関を選択できるようにしたいので、自動的にこの役割を割り当てる必要があります。管理者の資格情報をこのメソッドにハードコーディングせずに、つまり、 nano.config.url = "http://admin:password@127.0.0.1:5984/" 前述のように、指定したロールに新しいユーザーを自動的に割り当てるにはどうすればよいですか?

4

1 に答える 1

3

ロール配列は、データベース認証を決定するためにCouchDBによって使用されます。これにより、ユーザーの役割によって特定のデータベースへのアクセスを構成できます。ユーザーが自分の役割を設定できる場合は、誰かが自分自身に任意の機関へのアクセスを許可できます。彼らは自分自身を管理者にすることさえでき、それはあなたの管理者パスワードを保護する目的を無効にします。

あなたのユースケースが何であるかはわかりませんが、他の機関へのアクセスを阻止しようとしているとは思いません。むしろ、他のアプリケーション機能を実行するために役割を使用しようとしているのではないかと思います(たとえば、情報を除外して、表示内容を単純化する)。セキュリティ以外の機能を実行したいので、ユーザーのドキュメントに独自のフィールドを追加することを強くお勧めします。institutions各ユーザーにプロパティを追加できます。


あなたが本当にこれをしたいのなら、方法があります。受け取ったエラーは、データベースの更新検証機能から発生しています。管理者は、この機能を変更できます。_design/_auth_users

ドキュメントをダウンロードします。ファイルを開き、検索しOnly _admin may edit rolesて、テストが実行されている場所を確認します。その条件を削除し、ドキュメントをCouchDBに保存し直します。

于 2013-03-09T04:28:33.357 に答える