2016-03-11 2 views
1

У меня есть приложение Meteor, в котором мне нужно установить некоторый тип переменной для приложения, если пользователь является администратором, поэтому я могу использовать его позже, чтобы показать/скрыть определенные элементы HTML. Чтобы выяснить, является ли пользователь администратором, я должен проверить объект в LocalStorage на устройстве и посмотреть, соответствует ли он секретной строке, которая предоставит пользователю доступ администратора. Однако я не хочу, чтобы клиент видел секретную строку. На данный момент, у меня есть файл server/server.js, который имеет функцию в ней так:Meteor Проверить, является ли пользователь администратором

function isAdmin(cookie) { 
    if(cookie == "secret") { 
     return true; 
    } else { 
     return false; 
    } 
} 

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

Meteor.startup(function(){ 
    admin = false; 
    if(typeof(Storage) !== "undefined") { 
     cookie = localStorage.getItem("admin"); 
     admin = isAdmin(cookie); 
    } 
}); 

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

+0

В вашем подходе код находится на клиенте, секрет находится на клиенте в файле cookie, а соответствующий секрет также находится в вышеупомянутом клиентском коде. Вы даже назвали функцию 'isAdmin', чтобы упростить ее поиск. Там нет никакой безопасности. –

+0

Вот почему я пытаюсь выяснить правильный способ сделать это. –

+0

Как ответил @adlen, alanning: роли - хорошее место для начала –

ответ

4

Пакет Roles именно то, что вам нужно,

Чтобы добавить этот пакет, выполните следующую команду:

meteor add alanning:roles 

Вы можете добавлять роли пользователям, как это:

Roles.addUsersToRoles(someUserId, 'super-admin', Roles.GLOBAL_GROUP) 

и то вы можете проверить, имеет ли пользователь такую ​​роль:

if (Roles.userIsInRole(someUserId, ['super-admin'], 'real-madrid.com')) { 

    // if a user has the 'super-admin' role he will be able to access here 

} 
Смежные вопросы