【问题标题】:How to make Route setting after admin to be login in Meteor如何在管理员登录 Meteor 后进行路由设置
【发布时间】:2024-01-22 15:14:01
【问题描述】:

我为管理员用户进入系统创建了一个集合。我的意思是我不想在管理员端使用帐户数据包,但我不知道如何在管理员登录后进行路由设置。我做了一些但它不正确,

登录.html

Template.login.events({
   'click #entre': function (e, template) {

        var Username = template.$('#username').val();
        var Password = template.$('#password').val();
        var getinfo= admin.findOne({});
        if (Username == " " || Password == "") {
            swal("Error", "All fields must be Completed.", "error");
        } else if (getinfo.username== Username && getinfo.password== Password) {
            swal("Success", "Welcome admin.", "success");

            Session.set("hi", true);
        } else {
            swal("error", "Login Informations wrong.", "error");
        }

    }
});

路由器.js

Router.onBeforeAction(function () {
    if (!Session.get("hi")) {
        this.render('login');
    } else {
        this.render('dashboard');

    }
});

Router.route('userList', function () {
    this.render('userList');
});

Router.route('addnewuser', function () {
    this.render('addnewuser');
});

注意:我想让管理员登录时,它可以访问所有页面用户列表,添加新用户等。

【问题讨论】:

  • 我修复了代码中的一些错误。 JavaScript 中的变量区分大小写。我会为你尝试一个详细的答案。
  • 哦,谢谢您的回复

标签: meteor admin router


【解决方案1】:

如果我理解正确,您想授予您某些路由的管理员权限。有几种方法可以使用iron:router 来实现这一点,通过构建控制器或使用过滤器。我会创建一个 Iron Router Controller 来解决这个问题,并将它附加到任何需要这种检查的路由上。控制器和过滤器实际上都是我们正在寻找的可重用代码。

确保将alanning:roles 添加到您的软件包列表中(如果您还没有添加)并向您的至少一个Meteor.users() 添加一些管理员角色,就像它显示的here 一样

构建实际的控制器很容易。

lib/router.js

AdminController = RouteController.extend({
  onBeforeAction: function () {
    var loggedInUser = Meteor.userId();

    if (!!loggedInUser) {
      if (!Roles.userIsInRole(loggedInUser, 'admin')) {
        // Basic redirect to the homepage
        Router.go('homepage');
        this.stop();
      }
    } else {
      // Log them in when they are not
      Router.go('login');
      this.stop();
    }
    this.next();
  }
});

Router.route('/admin', {
  name: 'admin',
  controller: AdminController,
  waitOn: function () {
    // return subscriptions here
  }
});

继续将其添加到您喜欢的任何其他路线。

【讨论】:

  • 谢谢,但这不是我的问题的答案,我想我无法正确判断,我自己创建了集合,名称是管理员。没有任何流星数据包,集合有两个文件,名称是密码和用户名,没有meteor.userid()我怎么能控制它们;有什么办法吗?
  • 好吧,这并不是测试用户是否是管理员的真正方式。谁是admin 在此行中为您服务:admin.findOne({})?由于很多原因,测试getinfo.password== Password 也是错误的。密码是加密的字符串,你不能只根据输入检查它们。
  • 这个Collection里只有一条记录,是admin的信息,不能给admin这样的角色吗?
  • 您的管理员也是用户(但具有特殊角色的用户),所以他们应该在Meteor.users()。按照alanning:roles README 页面上的示例进行操作
最近更新 更多