2013-04-17 20 views
6

Tôi đang tạo API có các cấp truy cập khác nhau, 'khách hàng' chỉ có thể đọc. Nhưng 'admin' phải có quyền ghi. Các vai trò khác nhau được kiểm tra mỗi lần như một chính sách trong Sails.js và thiết lập các quyền trong req.session.Xác thực Sails.js cho các tác vụ mô hình

Tôi chỉ cần cung cấp cho 'khách hàng' không có quyền truy cập để tạo, cập nhật và xóa hành động, do đó tôi đã tạo một bộ điều khiển có các hành động CRUD và kiểm tra đó nếu người dùng có vai trò đúng. Tất cả các hành động bị hạn chế truy cập được chuyển hướng trough routes.js đến bộ điều khiển này.

Bây giờ vấn đề của tôi là khi tôi xóa một mục như: Category.destroy (req.param ('id')); Cung cấp cho tôi không xác định và không có phương thức thực hiện. Không giống như các tài liệu được tôi đề cập đến để khắc phục sự cố bằng cách tạo tài liệu này:

var deleted = Category.destroy(req.param('id'), function(err, status) { 
    if (status == 1){ 
     res.json({message: 'Category is deleted'}); 
    } else { 
     res.json({message: 'Oops, something went wrong'}); 
    } 
    }); 

Nhưng phải có cách khác để áp dụng xác thực cho những hành động cơ bản đó. Bởi vì bây giờ tôi đã viết tất cả các hành động.

Có điều gì sai với mã cho chức năng xóa mà tôi đã viết không? Và có thể áp dụng các chính sách và chuyển hướng đến các hành động mô hình mặc định, như thể không có xác thực nào cả?

Trả lời

2

Chỉ cần sửa đổi tất cả các chính sách được đổi tên thành các bộ điều khiển, như đã nêu trong de CLI: 'các ví dụ về tạo mẫu' cho một thông báo về bộ điều khiển được đặt tên là số ít. Vì vậy, tôi không cần phải chuyển hướng tất cả các hành động mô hình đến bộ điều khiển số nhiều (ví dụ). Bây giờ tất cả các hành động CRUD cơ bản đang hoạt động như mong muốn.

Các sails.js video hướng dẫn giúp tôi rất nhiều: http://www.youtube.com/watch?feature=player_embedded&v=GK-tFvpIR7c

0

tôi đoán (không phải là một người sử dụng Sails bản thân mình) sẽ là bạn hoặc vượt qua một callback, hoặc bạn sẽ nhận được một đối tượng trở lại trong đó có một phương pháp done():

Category.destroy(id, function(...) {...});  // method 1 
Category.destroy(id).done(function(...) {...}); // method 2 
+0

Cảm ơn câu trả lời của bạn. Tôi nghĩ rằng việc định tuyến lại trong các cánh buồm là một phần của các hành động không hoạt động chính xác. Bây giờ với viết mới nó hoạt động như nó cần. Nhưng cảm ơn bạn đã dành thời gian! – Loed

11

Bạn có thể xác định chính sách tại Models hoặc Controllers cấp. Dưới đây là ví dụ từ số /config/policies.js.

module.exports.policies = { 
    // Default policy (allow public access) 
    '*': true, 
    'events': 'eventsPolicy', // Policy for a Model 

    someController: { // Policy for a Controller 
     // Apply the "authenticated" policy to all actions 
     '*': 'authenticated', 

     // For someAction, apply 'somePolicy' instead 
     someAction: 'somePolicy' 
    } 
}; 

Dưới api/policies là nơi bạn có thể xác định cấp truy cập.

module.exports = function (req, res, next) { 
    if (req.session.user) { 
     var action = req.param('action'); 
     if (action == "create") { 
      req.body.userId = req.session.user.id; 
      req.body.username = req.session.user.username; 
     } 
     next(); 
    } else { 
     res.send("You're not authenticated.", 403); 
    } 
}; 

Hy vọng điều này sẽ hữu ích.

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