2013-12-18 5 views
5

पर प्रकाशित करें मेरे पास उल्का के साथ समस्या है: मेरे पास एक व्यवस्थापक है, जिसे सभी पंजीकृत उपयोगकर्ताओं को देखने की आवश्यकता है। लेकिन अन्य सभी उपयोगकर्ताओं के पास अन्य उपयोगकर्ताओं को देखने की क्षमता नहीं होनी चाहिए। इसलिए मैं serversideउल्का - सभी उपयोगकर्ताओं को व्यवस्थापक के लिए केवल

Meteor.publish("adminUsers", function(){ 

    var result; 
    if (Roles.userIsInRole(this.userId, ["admin"])) 
    { 
     result = Meteor.users.find(); 
    } 
    //console.log(result); 
    return result; 
}); 

ग्राहक पक्ष पर मैं

Meteor.subscribe("adminUsers"); 

के साथ इस की सदस्यता पर प्रकाशित निम्नलिखित कोड और

AllUsers = new Meteor.Collection("adminUsers"); 

अब मैं सभी उपयोगकर्ता प्राप्त करना चाहते हो इस कोड के साथ एक टेम्पलेट:

Template.adminUserverwaltung.AllUsers = function(){ 
console.log(AllUsers.find()); 
return AllUsers.find(); 
} 

और इस कोड के साथ टेम्पलेट में परिणाम दिखाने:

<template name="adminUserverwaltung"> 
    {{#each AllUsers}} 
    {{this.username}} 
    {{/each}} 
</template> 

लेकिन दुर्भाग्य से यह काम नहीं कर रहा है ... किसी को भी मुझे शायद मदद कर सकते हैं?

उत्तर

4

जब आप संग्रह की सदस्यता लेते हैं तो सदस्यता नाम adminUsers है लेकिन उपयोगकर्ता संग्रह अभी भी Meteor.users है जो पहले से ही परिभाषित किया गया है।

तो बस यह है कि बजाय

Template.adminUserverwaltung.AllUsers = function(){ 
    return Meteor.users.find(); 
} 
1

यहाँ आप क्या कर सकते हैं का उपयोग करने के बदल:

if (Meteor.isClient) { 
    Meteor.subscribe("allUsers"); 
    Template.hello.users = function() { 
    return Meteor.users.find(); 
    } 
} 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    Meteor.publish("allUsers", function(){ 
     var user = Meteor.user(); 
     if (user && user.emails[0].address === '[email protected]'){ 
     return Meteor.users.find(); 
     } 
     return null; 
    }); 
    }); 
} 

इस तरह केवल उपयोगकर्ता [email protected] सभी उपयोगकर्ताओं देखेंगे। अन्य केवल खुद को देखेंगे।

meteor docs में कस्टम उपयोगकर्ता संग्रह प्रकाशन का एक उदाहरण है।

+0

यह 'meteor.com: Meteor.user()] (http://docs.meteor.com/#/full/meteor_user) द्वारा निराश प्रतीत होता है जो' Meteor.user() ' 'Meteor.publish()' – Paul

+0

के अंदर 2013 के बाद से यह बदल सकता है। ['publ'] (http://docs.meteor.com/#/full/meteor_publish) दस्तावेज' this.userId' का उपयोग करने का सुझाव देता है। – rzymek

+0

हां, मैंने पाया कि मुझे व्यवस्थापक के लिए '_id'' एकत्र करने की आवश्यकता है और 'this.userId' की तुलना में सर्वर-साइड पर एक वैश्विक सरणी तैयार करने की आवश्यकता है। उपयोगकर्ता रिकॉर्ड की संपत्तियों की जांच करने का प्रयास मेरे अंदर प्रकाशित नहीं हो रहा था। – Paul

0

आप लगभग वहां हैं ... यह उत्तर उल्का-भूमिका पैकेज का उपयोग करता है क्योंकि ओपी प्रश्न में सामने आया है।

Meteor.publish("adminUsers", function(){ 
    var result = []; 
    if (Roles.userIsInRole(this.userId, ["admin"])) { 
     result = Meteor.users.find(); 
    } else { 
     this.stop(); 
     // YOUUU SHALL NOT.... PASS!!! ~Gandalf 
    } 
    return result; 
}); 

ग्राहक पक्ष पर, के साथ इस की सदस्यता:

Meteor.subscribe("adminUsers"); 

ऐसा मत करो। इसे छोड़ दो Meteor.users आपका संग्रह है।

// NOO!! AllUsers = new Meteor.Collection("adminUsers"); 

अब मैं इस कोड के साथ एक खाका में सभी उपयोगकर्ताओं को प्राप्त करना चाहते हैं:

Template.adminUserverwaltung.helpers = { 
    AllUsers: function(){ 
     return Meteor.users.find(); 
    } 
}; 

और इस कोड के साथ टेम्पलेट में परिणाम दिखाने:

<template name="adminUserverwaltung"> 
{{#each AllUsers}} 
    {{this.username}} 
{{/each}} 
</template> 

और यह होना चाहिए अब काम कर रहे हैं। :)

संबंधित मुद्दे

 संबंधित मुद्दे