Nano Hash - криптовалюты, майнинг, программирование

Разрешить действия на основе параметров Meteor.user()?

Я хочу разрешить добавление и удаление из моих коллекций Meteor на основе свойства пользователя.

Вот как я настроил своего администратора:

if (Meteor.isServer) {

    if (Meteor.users.find().count() === 0) {

        Accounts.createUser({
        username:'Greg',
        password:'default',
        isAdmin: 1
        });

    }

}

Теперь я хочу разрешить каждому пользователю с isAdmin = true создавать другого пользователя через Accounts.createUser:

Meteor.methods({
    makeUser: function(attributes) {
        var user = Meteor.user();
        if (user.isAdmin)
            Accounts.createUser(attributes)
        else
            console.log('User ' + user.username + ' created a player.')
    }  
})

Пользователь никогда не создается, как будто user.isAdmin никогда не равен true. Что я делаю не так? Это связано с публикацией и подпиской? На данный момент у меня все еще включена автопубликация.

07.10.2014

  • Если я изменю свой код на isAdmin: 'admin' и если (user.isAdmin = 'admin'), он всегда равен true, и каждому пользователю разрешено использовать makeUser. 07.10.2014
  • Если вы напишете в консоли разработчиков Meteor.user(), что вы получите? 07.10.2014
  • Только мой ID и мое имя пользователя. 07.10.2014

Ответы:


1

Добавьте флаг isAdmin к объекту профиля:

Accounts.createUser({
        username:'Greg',
        password:'default',
        profile:{
          isAdmin: 1
        }  
});

См. документы.

Методы Accounts.createUser позволяют добавлять ТОЛЬКО поля username, password, email и profile в пользовательский объект.

Meteor.methods({
    makeUser: function(attributes) {
        var user = Meteor.user();
        if (user.profile && user.profile.isAdmin)
            Accounts.createUser(attributes)
        else
            console.log('User ' + user.username + ' created a player.')
    }  
})

Обновлять

Рассмотрите возможность использования пакета roles.

07.10.2014
  • По умолчанию пользователи могут писать в свои собственные файлы profile. Вы захотите отключить это, иначе любой может сделать себя администратором. 07.10.2014
  • Через: Meteor.users.deny({update: function () {return true; }});? 07.10.2014
  • Взгляните на пакет roles. Он создает поле user.roles и предоставляет вам API для простой проверки роли пользователя. 07.10.2014

  • 2

    В этом случае обычный пользователь все еще может вызвать Accounts.createUser и полностью обойти ваш makeUser, чтобы создать пользователя, что я не думаю, что это то поведение, которое вы хотите видеть. Я бы предложил обернуть Accounts.onCreateUser логикой isAdmin от @Kuba Wyrobek:

    // server side
    Accounts.onCreateUser(function(options, user) {
        user.profile = options.profile ? options.profile : {};
        if (user.profile && user.profile.isAdmin) {
            return user;
        } else {
            throw new Meteor.Error(403, "Forbbiden");
        }
    });
    
    07.10.2014
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..