Я хочу установить роли для нового пользователя.
Я пытался обновить массив ролей в метаданных во время регистрации, но получаю ошибку.Если я удаляю метаданные ролей, новый пользователь создается просто отлично.
db.signUp(userId, 'pass', {
metadata: {
email: 'robi434n@boywonder.com',
birthday: '1932-03-27T00:00:00.000Z',
likes: ['acrobatics', 'short pants', 'sidekickin\'']
roles: ['basic']
}
}, function (err, response) {
if (err) {
if (err.name === 'conflict') {
console.log('batman" already exists, choose another username')
// "batman" already exists, choose another username
} else if (err.name === 'forbidden') {
console.log('invalid username')
// invalid username
} else {
console.log('sign up error')
// HTTP error, cosmic rays, etc.
}
} else {
console.log('user signed up')
// login()
}
})
Итак, я понял, что сначала нужно изменить код pouchdb-authentication-index.js для принятия ролей.
var signUp = pouchdbUtils.toPromise(function (username, password,roles, opts, callback) {
var db = this;
if (typeof callback === 'undefined') {
callback = typeof opts === 'undefined' ? (typeof password === 'undefined' ?
username : password) : opts;
opts = {};
}
if (['http', 'https'].indexOf(db.type()) === -1) {
return callback(new AuthError('This plugin only works for the http/https adapter. ' +
'So you should use new PouchDB("http://mysi3te.org:5984/mydb") instead.'));
} else if (!username) {
return callback(new AuthError('You must provide a username'));
} else if (!password) {
return callback(new AuthError('You must provide a password'));
}
var userId = 'org.couchdb.user:' + username;
var user = {
name: username,
password: password,
roles: roles,
type: 'user',
_id: userId,
};
updateUser(db, user, opts, callback);
});
Затем вы можете отправить роли в регистрации.Я отправляю базовое ниже
signUp()
function signUp () {
db.signUp(userId, 'pass', ['basic'], {
metadata: {
email: 'robi434n@boywonder.com',
birthday: '1932-03-27T00:00:00.000Z',
likes: ['acrobatics', 'short pants', 'sidekickin\'']
}
}, function (err, response) {
if (err) {
if (err.name === 'conflict') {
console.log('batman" already exists, choose another username')
// "batman" already exists, choose another username
} else if (err.name === 'forbidden') {
console.log('invalid username', err)
// invalid username
} else {
console.log('sign up error', err)
// HTTP error, cosmic rays, etc.
}
} else {
console.log('user signed up', err)
login()
}
})
}
, теперь вам нужно перейти на базу данных couchdb _user _design / _auth, изменить документ
else if (newDoc.roles.length > 0 ) {\n
и установить
else if (newDoc.roles.length > 0 && newDoc.roles[0] !== 'basic' ) {\n
Теперь у вас будет базовый уровень в вашей сессии, и вы можете добавить больше ролей, немного подправив код.Это позволяет мне легко устанавливать разрешения для роли члена, чтобы ограничить доступ к другим базам данных.Или более простое решение, которое я нашел и протестировал, - добавить новый документ по дизайну в вашу базу данных с помощью следующего кода.Это позволит только пользователям, которые вошли в систему, доступ к вашей базе данных
{
"_id": "_design/usersOnly",
"_rev": "17-6fb7e6c0ccfca8b2e56738ad63e26107",
"language": "javascript",
"validate_doc_update": "\n function(newDoc, oldDoc, userCtx){ \n // check if user is logged in \n if(!userCtx.name){ throw({forbidden : 'No way.. login man!'});} \n //reqired fields to update \n function require(field){ var message = field + ' is required'; if(!newDoc[field]){ throw({'forbidden':message}) }} require('name'); }"
}