2013-06-10 33 views
11

Cách duy nhất tôi đã tìm thấy để xóa tài khoản người dùng trong thiên thạch (trừ đổ cơ sở dữ liệu với reset mrt), là bởi trên thực tế cách đăng nhập vào tài khoản người dùng cụ thể, và xóa tài khoản từ giao diện điều khiển, sử dụng:Làm cách nào để xóa tài khoản người dùng trong Meteor?

Meteor.users.remove('the user id'); 

Nhưng như tôi đã nói, tôi cần đăng nhập với tư cách là người dùng cụ thể và không thể tìm ra giải pháp cho phép tôi xóa bất kỳ người dùng nào khỏi db. Tôi chắc rằng nó có liên quan đến quyền hạn hoặc vai trò, nhưng tôi không chắc chắn cách tiếp tục/giải pháp tốt nhất/cách thiết lập vai trò quản trị cho một người dùng cụ thể để tôi có thể xóa các tài khoản người dùng khác nhau.

+0

Bạn không cần phải đăng nhập, miễn là bạn có quyền xóa một người dùng ở phía máy chủ một cách rõ ràng: Meteor.users.Users.allow ({remove: function() {return thật;}}); Rõ ràng bạn chỉ nên trả lời đúng khi bạn tin cậy cuộc gọi này/người dùng… –

Trả lời

20

Bạn có thể làm

meteor mongo

hoặc

meteor mongo myapp.meteor.com cho một ứng dụng được triển khai

Sau đó

db.users.remove({_id:<user id>});

tôi sẽ không recommen d nhưng nếu bạn muốn xóa bất kỳ người dùng nào mà không bị đăng nhập từ thiên thạch, bạn sẽ cần sửa đổi các quy tắc cho phép. Tuy nhiên, việc xóa người dùng là một sự kiện rất khó xảy ra do đó ở trên có thể là cách tốt nhất để làm điều đó.

Dù sao nếu bạn muốn, hãy sửa đổi thuộc tính Meteor.users.allow({remove:function() { return true });. Xem http://docs.meteor.com/#allow. Bạn có thể thêm vào một số logic tùy chỉnh ở đó để nó chỉ cho phép bạn làm như vậy nếu bạn là quản trị viên

+0

Cảm ơn bạn. Tôi tự hỏi tại sao họ không giải thích điều đó trên trang web của họ. –

+0

@EricLeroy Tôi nghĩ rằng họ hy vọng bạn biết một chút về mongodb, giống như biết javascript và handlebars là một. – booyaa

+1

@ booyaa, vâng, tôi nhận ra rằng, nhưng khi tôi kéo lên mongo, nó không bao gồm cơ sở dữ liệu mongo của tôi cho thiên thạch. Điều quan trọng là sử dụng meteor mongo –

8

Tôi gặp khó khăn khi thực hiện điều này trên nitrous.io vì tôi không thể mở cả Meteor và Mongo. Tôi đặt:

Meteor.users.remove(' the _id of the user '); 

trong phần isServer để xóa người dùng.

3

Nếu bất kỳ ai vẫn đang tìm kiếm câu trả lời cho câu hỏi này, tôi đã phác thảo giải pháp của tôi bên dưới.

Khi tôi tạo người dùng mới, tôi thêm trường được gọi là vai trò trong tài liệu người dùng của mình. Nếu tôi muốn người dùng có thể xóa người dùng khác khỏi bộ sưu tập Meteor.users, tôi cho anh ta vai trò là administrator. Nếu không, tôi cho anh ta một vai trò là member. Vì vậy, tài liệu của tôi sử dụng trông giống như thế này -

{ 
    "_id" : ..., 
    "createdAt" : ..., 
    "services" : {...}, 
    "username" : "test", 
    "profile" : { 
    "name" : "Test Name", 
    "role" : "administrator" 
    } 
} 


Trên client, tôi có một danh sách người dùng (thêm cách sử dụng một #each mẫu thẻ) với một nút xóa bên cạnh mỗi người dùng. Người dùng phải đăng nhập để xem danh sách này. Tôi xác định một xử lý sự kiện cho nút remove -

'click #remove-user-btn': function() { 
    Meteor.users.remove({ _id: this._id }, function (error, result) { 
    if (error) { 
     console.log("Error removing user: ", error); 
    } else { 
     console.log("Number of users removed: " + result); 
    } 
    }) 
} 


Tuy nhiên, Meteor.users không cho phép loại bỏ các hoạt động từ khách hàng theo mặc định. Vì vậy, bạn phải chỉnh sửa cuộc gọi lại Meteor.users.allow trong máy chủ như được hiển thị bên dưới để cho phép người dùng bị xóa khỏi phía máy khách. Nhưng chúng tôi cần đảm bảo rằng chỉ người dùng có vai trò quản trị mới được phép đặc quyền này.

Meteor.users.allow({ 
    remove: function (userId, doc) { 
    var currentUser, userRole; 
    currentUser = Meteor.users.findOne({ _id: userId }, { fields: { 'profile.role': 1 } }); 
    userRole = currentUser.profile && currentUser.profile.role; 
    if (userRole === "administrator" && userId !== doc._id) { 
     console.log("Access granted. You are an administrator and you are not trying to delete your own document."); 
     return true; 
    } else { 
     console.log("Access denied. You are not an administrator or you are trying to delete your own document."); 
     return false; 
    } 
    }, 
    fetch: [] 
}); 

Đây là ý tưởng chung. Bạn có thể xây dựng dựa trên điều này cho phù hợp với nhu cầu của bạn.

+1

Không đặt thông tin quan trọng như vậy trong đối tượng 'user.profile' trừ khi bạn * thực sự * biết bạn đang làm gì! Đối tượng đó có thể chỉnh sửa được từ máy khách ngay cả sau khi 'không an toàn' đã bị xóa (!) Tốt hơn là hãy đặt trường' vai trò' trên tài liệu người dùng gốc hoặc dưới một số trường tùy chỉnh khác. https://dweldon.silvrback.com/common-mistakes#profile-editing – Sphinxxx

0

đây là các bước để xóa người dùng từ Mông Cổ thông qua giao diện điều khiển: bước 1: mở giao diện điều khiển mới bước 2: thay đổi diretory để ứng dụng của bạn như (cd myapp) bước 3: nhập lệnh sao băng Mongo bước 4: đảm bảo tồn tại một bảng được gọi là người dùng, db.users.find ({}); bước 5: tìm userid của người dùng bạn muốn xóa và nhập db.users.remove ({_ id: "nRXJCC9wTx5x6wSP2"}); // id phải nằm trong dấu ngoặc kép

Các vấn đề liên quan