2015-04-17 1 views
0

Для приложения Meteor я пишу, я хочу иметь два уровня аутентификации пользователей. На первом уровне пользователь будет входить в группу, используя имя пользователя и пароль (общий для многих людей, входящих в группу). На втором уровне пользователь войдет в свою личную учетную запись, входящую в указанную группу, используя свой адрес электронной почты и пароль.Как добавить аутентификацию пользователя уровня 2 для приложения Meteor

У меня уже есть система, разработанная для того, чтобы пользователь мог войти в свою личную учетную запись (используя электронную почту/пароль), но я смущен тем, как добавить функцию, чтобы каждый пользователь принадлежал к определенной группе.

Аналогичным примером может служить система входа в систему, подобная слабину. Когда вы входите в систему с именем группы, войдите в свой профиль. Если вы прошли аутентификацию (например, ваши учетные данные говорят, что ваш адрес электронной почты/пароль верен + вы принадлежите группе), вы можете начать использовать приложение.

Я чувствую, что решение очень простое, я попытался использовать элемент account-ui {{> loginButtons}}, но он работал только на втором уровне (мог только регистрировать пользователя в своем профиле и не мог иметь пользователей входить в разные группы)

Я думаю, что моя проблема может быть там, где я вставляю указанный элемент, или может быть, что метеор не позволяет использовать несколько экземпляров аутентификации пользователя.

Я ищу некоторые разъяснения по моей проблеме, любая помощь будет принята с благодарностью!

+0

Это довольно необычно, почему бы вам просто не использовать разрешения/роли вместо этого? https://atmospherejs.com/alanning/roles –

+0

Спасибо, это кажется интересным, и я определенно буду больше смотреть на него. Но разве было бы проще просто дважды войти в систему? Вновь они сначала регистрируются (и аутентифицируются) в определенной группе, например, в учетной записи (или могут создавать новую). И в этом аккаунте они могут войти в систему/зарегистрироваться со своими учетными данными. Это немного странно, но кажется, что это так просто реализовать, по крайней мере теоретически. Мне просто нужна помощь в выяснении того, как ... –

+0

Но почему бы просто не иметь «группы» в качестве ролей, тогда у вас всего один логин, и у пользователя есть список «групп», с которыми они могут взаимодействовать. Просто проверьте, зарегистрирован ли пользователь, а затем проверьте, являются ли они частью этой группы. Легко. –

ответ

0

как и кто-то уже рекомендовал, alanning: Роли - лучший способ управлять правами пользователя. Групповое разрешение - это еще один способ взглянуть на роли пользователей.

Некоторые копировать вставить код для тех, кто приходит, глядя на

if Roles.userIsInRole(userId, [ 
    'llama' 
    'admin' 
    ], Roles.GLOBAL_GROUP) 
    // Do something with privileges 
else 
    // No privileges 

Secure публикации только для пользователей в роли администратора:

if (Roles.userIsInRole(this.userId, ['admin'], Roles.GLOBAL_GROUP)) { 
    return SomeCollection.find({}); // Publish all fields 
} else { 
    return SomeCollection.find({}, {fields: { // Only return public fields 
     'name': true 
     } 
    } 
} 

Ограничить публикацию самой коллекции ролей пользователей только в роли администратора :

Meteor.publish("roles", function() { 
    if (Roles.userIsInRole(this.userId, 'admin', Roles.GLOBAL_GROUP)) { 
     return Meteor.roles.find({}); 
    } else { 
     this.ready(); 
    } 
}); 

добавить/удалить пользователя из группы:

Meteor.methods({ 
// add user to role. Roles can be an array 
    addRoleToUser: function(userId, roles) { 
    if(Roles.userIsInRole(this.userId, 'admin', Roles.GLOBAL_GROUP)) { 
     Roles.addUsersToRoles(this.userId, roles, Roles.GLOBAL_GROUP); 
    }, 

// Remove user from a role: 
    removeRoleFromUser: function(userId, roles) { 
    if(Roles.userIsInRole(this.userId, 'admin', Roles.GLOBAL_GROUP)) { 
     Roles.removeUsersFromRoles(userId, roles, Roles.GLOBAL_GROUP); 
    } 
    } 
}