API REST được viết bằng ExpressJs 4.x.x/NodeJS.ACL hoạt động như thế nào trong API REST?
Giả sử một giao diện:
app.delete('/api/v1/users/:uid', function (req, res, next) {
...
}
Vì vậy, với người dùng giao diện có thể bị xóa.
Giả sử có 2 Khách hàng trong hệ thống và mỗi Khách hàng đều có Người dùng. Người dùng có thể có đặc quyền xóa người dùng khác bằng vai trò là Khách hàngAdmin. Nhưng Người dùng này chỉ có thể xóa Người dùng là Người dùng từ Công ty của anh ấy (Khách hàng).
Vì vậy, hãy đưa ACL vào hiện trường. Giả sử trong ACL của chúng tôi, chúng tôi có thể xác định vai trò, tài nguyên và quyền. (Mã được chấp nhận từ http://github.com/OptimalBits/node_acl#middlware.)
app.delete('/api/v1/users/:uid', acl.protect(), function (req, res, next)
{
// ? Delete User with uid = uid or check
// ? first if current user is in same company as user uid
}
Có hai điều cần xem xét. Một người đang bảo vệ lộ trình từ những người không được phép HTTP/DELETE trên tuyến đường đó (/ api/v1/users /: uid) và người kia là một Person with Role CustomersAdmin sẽ không được phép xóa Người dùng khỏi một Khách hàng khác.
ACL phải làm cả hai? Hoặc là nó phải bảo vệ route/api/v1/users?
Vì vậy, tôi sẽ sử dụng nó như
acl.allow([
{
roles:'CustomersAdmin',
allows:[
{resources:['/api/v1/users', '/api/v1/users'] permissions:'delete'}
}
app.delete('/api/v1/users/:uid',acl.middleware(3), function(req,res,next)
{
Make sure uid is a User from same Customer as request is from(req.session.userid)
}
này sẽ cho phép mỗi người dùng với vai trò CustomersAdmin để xóa bất cứ người sử dụng anh ta muốn. Hoặc có nên định nghĩa từng tuyến đường Người dùng có thể là một Tài nguyên và xác định nhiều Vai trò có thể tương tác với chúng không?
acl.allow([
{
roles:'CustomersAdminOne',
allows:[
{resources:['/api/v1/users/1', '/api/v1/users/2'], permissions:'delete'}]
},
{
roles:'CustomersTwoAdmin',
allows:[
{resources:['/api/v1/users/3','/api/v1/users/4'], permissions:'delete'}
]
}
app.delete('/api/v1/users/:uid',acl.middleware(), function(req,res,next)
{
no logic needed to be sure that request is from a user within the same customer
}
Xin chào là có một hướng dẫn về cách triển khai node_acl, đã cố gắng sử dụng một trên nom nhưng mạng của nó cho tôi. Tôi sẽ đánh giá cao phản hồi của bạn –