我试图找到一种方法来保护一组管理CRM页面,以控制我正在处理的Meteor应用程序。只有一个代码库,服务器,面向客户的网站和面向管理的网站在一个项目中。
我需要一个可以验证一个用户名和密码对的登录页面,以及一种在客户端和服务器端检查用户状态的简单方法。如果没有使用x分钟,我还需要一种管理员授权超时的方法。
我已经查看了流星帐号套餐,这对我所需要的东西来说太过分了。这个网站只有一个管理员用户,因此只能存储一组管理员用户名和密码。我不希望它存储在数据库中,而是在应用程序启动时在服务器上加载了一个设置文件。它不需要角色,电子邮件,密码重置功能。</ p>
我可以用来实现这个包或方法的任何建议吗?
答案 0 :(得分:1)
我知道你说帐号:密码包似乎有点“矫枉过正”,但实际上它确实不是。你在那里获得的是可插入的UI(通过accounts-ui和其他构建它的包)。我采用的方法就是这样(即使对于支持多个用户的应用程序也能正常工作,因为最终你仍然需要引导初始用户)。
首先,我使用帐户组合:密码和alanning:角色。如果你绝对不需要角色部分,你可能会在没有它的情况下离开,但在我所有的个人情况下,我发现为各种用户提供多级ACL是很有用的。我们可以进入一个关于使用角色/组来锁定单个特征的整个哲学讨论,但这是讨论的主题。
接下来,您需要启动用户。在/server
文件夹中的某个位置,您可以执行以下操作:
if (Meteor.users.find({}).count() == 0) {
// No users created...create default users
Accounts.createUser({
username: 'myuser',
email: 'myuser@mydomain.com',
password: 'myp4ssw0rd!',
profile: { profileProp: 'propVal` }
});
// Add new user to whatever roles needed
}
我通常会在这里做更多的事情,例如检查我的角色是否存在,如果没有,在我尝试处理用户之前创建它们,但这里的关键是在服务器启动时执行此操作。
创建用户和角色后,需要检查/验证应用中的用户/角色。对于菜单项,您可以根据用户是否已登录和/或具有特定角色来显示/隐藏内容,还应在应用程序中验证需要ACL的路由,例如管理路由。此外,还要在所有出版物中使用用户ID,以限制用户可以看到的数据。不要仅仅依赖于隐藏菜单选项......通过默默无闻的安全性是行不通的。
为什么我建议这样做?首先,它真的不是那么多代码。您可以在20行,最大值中完成此操作,并具有完整的身份验证设置。这些代码行的好处大大超过了它将带给你的30分钟,因为你现在可以在你的应用程序中进行“真正的”用户身份验证,并且如果你决定在将来有能力做OAuth这样的事情。最重要的是,您可以解锁不需要代码的预构建UI插件,内置和附加方法来帮助检查ACL,用户锁定数据的能力,您不必尝试实施自己的解决方案。