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.
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… –