Meteor(0.9.0.1):使用角色包分配管理员角色的问题
Meteor (0.9.0.1): Issue assigning admin role using a roles package
我正在使用这个角色流星包,无法访问我的管理面板。
我目前的行为是登录管理用户被重定向到主页,而不是显示在管理区域。
如果我运行以下代码,我会返回"false",表明该用户不是管理员用户:
Roles.userIsInRole(Meteor.user(), ['admin']);
如果我尝试在控制台上添加角色,我会得到以下信息:
Roles.addUsersToRoles("Nvu2wZRg3K2wd4j4u", ['admin']);
未定义
insert failed: MongoError: E11000 duplicate key error index: meteor.roles.$name_1 dup key: { : "admin" }
update failed: Access denied
Roles.addUsersToRoles("Meteor.user()", ['admin']);
undefined
insert failed: MongoError: E11000 duplicate key error index: meteor.roles.$name_1 dup key: { : "admin" }
这似乎表明该用户已经分配了角色。我认为权限错误是由于未发布角色造成的。如果有一个重复的错误,那么这个用户似乎应该被分配管理员角色
这是相关代码。模板:
<template name="adminTemplate">
{{#if isAdminUser}}
{{> accountsAdmin}}
{{else}}
Must be admin to see this...
{{/if}}
</template>
<template name="accountsAdmin">
accountsAdmin template
</template>
助手:
Template.adminTemplate.helpers({
// check if user is an admin
isAdminUser: function() {
return Roles.userIsInRole(Meteor.user(), ['admin']);
}
})
我的router.js文件
Router.configure({
layoutTemplate: 'layout'
});
Router.map( function () {
this.route('home', {path: '/'});
this.route('about', {path: '/about'});
this.route('faq', {path: '/faq'});
this.route('myaccount', {path: '/myaccount'});
this.route('admin', {
layoutTemplate: 'adminlayout',
path:'/admin',
template: 'accountsAdmin',
onBeforeAction: function() {
if (Meteor.loggingIn()) {
this.render(this.loadingTemplate);
} else if(!Roles.userIsInRole(Meteor.user(), ['admin'])) {
console.log('redirecting');
this.redirect('/');
}
}
});
});
我的startup.js 中有以下内容
Meteor.startup(function () {
// This is temporary
if (Meteor.users.findOne("Nvu2wZRg3K2wd4j4u"))
Roles.addUsersToRoles("Nvu2wZRg3K2wd4j4u", ['admin']);
});
有人对此有什么想法吗?
在客户端设置用户角色是不可能的,你应该在服务器端做这件事,在代码中硬编码UUID从来都不是一个好主意(即使是临时的)。
出于测试目的,您可以使用以下代码:
server/collections/users.js
:
insertUsers=function(){
var adminId=Accounts.createUser({
username:"admin",
password:"password"
});
//
Roles.addUsersToRoles(adminId,"admin");
};
server/startup.js
:
// always start from scratch (you will want to comment this line at some point !)
Meteor.users.remove({});
if(Meteor.users.find().count()===0){
insertUsers();
}
你可以去掉你的isAdminUser
助手,Roles提供了一个专门为此目的设计的助手,它被称为{{isInRole "list of comma separated roles"}}
{{#if isInRole "admin"}}
...
{{else}}
当然,您必须登录,因为助手正在针对Meteor.user()
进行测试。
我想你的管理员用户从来没有机会受到管理员角色的影响。。。
您的代码的其余部分看起来还可以,所以希望在解决这些细节后它应该可以工作。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 如何在jQuery中将函数的输出分配给变量
- 为集合分配大量的模型弹药
- onclick函数需要双击,因为类分配延迟
- Javascript 将变量分配给警报
- 将节点数据分配给另一个变量jstree
- 逃脱了单一角色的介绍人,而不是实际角色
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript变量分配-按类别
- 如何将内容分配给元素
- 为变量分配多个nodejs导出返回值时出现问题
- 如何为Meteor应用程序中的第一个用户分配特定角色
- 意思是.js AngularJS 菜单服务为页面分配角色
- Meteor(0.9.0.1):使用角色包分配管理员角色的问题
- 如何在meteor上创建条件,将admin角色分配给新用户
- 动态分配数据角色属性
- 获取所有没有分配角色的用户