【问题标题】:Display only users with a specific role in meteor-tabular table在流星表中仅显示具有特定角色的用户
【发布时间】:2016-04-02 16:04:15
【问题描述】:

我的网站允许用户通过连接他们的谷歌帐户来申请,一旦创建了一个帐户,他们就会被赋予一个“待定”角色(使用alanning:roles 包)。我想有一个table 供管理员查看新申请人何时申请,管理员可以从那里正确管理用户申请(将角色更改为接受、拒绝等)。所以,我已经创建了我的表,但它显示了所有用户,我想知道是否有人知道一种方法,所以只有具有“待定”角色的用户才会显示在我的表中?

这是我目前所拥有的:

 TabularTables.ManageApplications = new Tabular.Table({
   name: 'ManageApplications',
   collection: Meteor.users,
   allow: function (userId) {
     return Roles.userIsInRole(userId, 'admin');
   },
   autoWidth: false,
   oLanguage: {
       "sSearch": "Search: "
   },
   columns: [
     { data: //column details here },
     { data: //column details here },
     { data: //column details here },
     { data: //column details here },
     { data: //column details here },
   ],
 });

这可行,但它会显示每个用户(不仅仅是具有“待定”角色的用户)。

然后我创建了这个来尝试只为待定用户发布数据:

 Meteor.publish("pendingUsers", function() {
   var isAdmin = Roles.userIsInRole(this.userId, 'admin');
     if (isAdmin) {
       return Roles.getUsersInRole('pending').fetch();
     } else {
       return null;
     }
 });

并通过在我的表中添加pub: "pendingUsers", 进行订阅。这有点工作,它使它只在“待定”角色用户的列中显示数据,但是,它仍然列出每个用户,并且只有数据所在的空格。

如果有人知道我如何实现这一点,如果您能提供一些见解,将不胜感激,因为我已经坚持了很长一段时间......我相信这可能与“Displaying Only Part of a Collection's Data Set”有关在表格自述文件中,但我非常不确定如何设置它。非常感谢任何示例或帮助。

【问题讨论】:

    标签: meteor datatables aldeed-tabular


    【解决方案1】:

    已通过将以下内容添加到我的表中来解决此问题:

    selector: function(userId) {
        return {
            _id: {$in: Roles.getUsersInRole('pending')
                            .map(function(user){ return user._id} ) }
        }
    },
    

    【讨论】:

      【解决方案2】:

      鉴于发布的工作方式,您很可能拥有另一个发布和订阅,它为您提供其他用户,但具有不同的键/字段集。由于多个发布可以同时在同一个集合上运行,因此您希望在发布提供给您的客户端上执行相同的.find()

      继续在您的表定义中添加selector,如下所示:

      selector: function( userId ) {
        return Roles.getUsersInRole('pending');
      }
      

      顺便说一句,您的出版物中不需要.fetch()Roles.getUsersInRole() 已经返回Meteor.users光标

      【讨论】:

      • 我将选择器添加到表定义中,但现在每次刷新页面时我都会在服务器控制台上收到此错误 (pastebin.com/W4pfVgBk),并且表现在也完全为空并说“表中没有可用数据”。我还从我的出版物中删除了“.fetch()”。有什么想法吗?
      • 你的错误冒泡到collection-hooks - 你有什么可能会干扰?
      • 我确实有一些在创建用户后运行的收集挂钩,我删除了这些挂钩进行测试,但仍然收到相同的错误。然后我删除了它们并删除了软件包,然后收到了一个稍微不同的错误,然后我删除了 kadira:debug 并缩短了错误,这是来自服务器控制台的错误:pastebin.com/qQM1Jh1z
      • 基本上:Exception from sub tabular_getInfo id ShD25xYqq3FzC9sgP undefined - _id 是什么?
      • 我查看并似乎找不到任何匹配的 id,每次刷新页面时都会收到一个新错误,并且 id 每次都不同。我阅读了更多内容,发现创建custom publish function 时有一些要求我猜这是导致错误的原因。我在 [Meteor Roles 2.0] (github.com/alanning/meteor-roles/tree/v2.0) api docs 中看到我可以设置 [queryOptions],我相信这是我需要做的我只是有点不确定这会是什么样子。
      【解决方案3】:

      使用选择器:https://github.com/aldeed/meteor-tabular#modifying-the-selector

      如果你想检查这样一个组的所有规则:

           selector: function (userId) {
             return 'roles.myrole': {$exists: true}};
           },
      

      或者只有几个:

           selector: function (userId) {
             return 'roles.myrole': {$in: ['viewer', 'editor']}};
           },
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        • 1970-01-01
        相关资源
        最近更新 更多