2016-03-11 68 views
1

我有一个流星应用程序,如果用户是管理员,我需要为应用程序设置某种类型的变量,以便日后可以使用它显示/隐藏HTML的某些元素。要确定用户是否为管理员,我必须检查设备上LocalStorage中的对象,并查看它是否与秘密字符串相匹配,从而授予用户管理员访问权限。但是,我不希望客户端看到秘密字符串。现在,我已经拥有这样它的功能文件server/server.js流星检查用户是否管理员

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的一个Cookie的网站是由客户端加载并进行比较到秘密字符串,然后设置一个变量,指出用户是否是我可以在应用程序的其余部分使用的管理员。我也需要它是安全的,所以客户端不能设置变量或其他任何东西作为管理员。

+0

在您的方法中,代码位于客户端,秘密位于客户端的Cookie中,匹配的秘密也位于您上述的客户端代码中。你甚至可以命名“isAdmin”函数使其更容易找到。那里没有安全。 –

+0

这就是为什么我试图找出正确的方法来做到这一点。 –

+0

@adlen回答说:角色是一个开始的好地方 –

回答

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 

} 
相关问题