【问题标题】:Meteor-Roles and linked collectionsMeteor-Roles 和链接的集合
【发布时间】:2018-04-23 16:34:49
【问题描述】:
关于角色,我有一个概念问题。我对数据库设计或访问控制不是很熟悉。假设我有 4 个集合。
- 用户
- 公司
- 设备
-
地点
- 用户可以注册。
- 将向公司添加用户。
- 用户可以使用公司 ID 访问所有设备和位置。
验证注册用户是否属于公司的好方法是什么?我正在考虑手动验证,因为不是公司中的每个人都应该有权访问。但任何聪明的想法都会受到赞赏。
馆藏设备和地点保存属于不同公司的文件。这些集合可以变得非常大。每个公司都有一个“设备集合”是否明智?
我应该为每个公司创建一个组并将用户添加到正确的组吗?
将集合/文档链接到用户/公司的最佳方式是什么?
还有其他想法吗?
谢谢。
【问题讨论】:
标签:
mongodb
meteor
alanning-roles
【解决方案1】:
您是否尝试过使用:https://github.com/alanning/meteor-roles
我用它来验证流星中的角色。 “公司”集合中会有一个条目,因此您可以拥有公司 ID。通过使用流星角色,我认为完成您的任务会很容易。在示例中。
用户集合应该有:
_id:
Name:
Role : [ //owner , employee ]
Company ID:
您是否将角色和公司 ID 设为数组以处理多个公司的单个用户记录,从而使其从长远来看更加灵活,这取决于您。
接下来将在您的用户集合中创建一个助手以轻松跟踪角色。即。
isAdmin(companyId) {
if(isValidRolesData(this.roles,'default-group'))
return this.roles['default-group'].indexOf(`${companyId}-admin`) > -1;
},
/**
* Check if a user is Staff
*
* @param {any} facilityid
* @returns
*/
isStaff(companyId) {
if(isValidRolesData(this.roles,'default-group'))
return this.roles['default-group'].indexOf(`${companyId}-staff`) > -1;
},
/**
* Check if a user is Receptionist
*
* @param {any} facilityid
* @returns
*/
isReceptionist(companyId) {
if(isValidRolesData(this.roles,'default-group'))
return this.roles['default-group'].indexOf(`${companyId}-receptionist`) > -1;
},
通过这种流程,我想您可以实现所需的确切目标:)