Ủy quyền NodeJS

Ủy quyền là rất quan trọng đối với các ứng dụng web. Nó cấp cho đúng người dùng quyền truy cập vào các phần trong ứng dụng web của bạn trên cơ sở vai trò và quyền của họ. Trong một ứng dụng đơn giản, việc thêm ủy quyền trong ứng dụng vào ứng dụng của bạn tương đối đơn giản. Nhưng với các ứng dụng phức tạp, cần phải tạo các vai trò và quyền khác nhau, điều này có thể trở nên khó quản lý

Trong hướng dẫn này, bạn sẽ học cách sử dụng Cerbos để thêm quyền cho một Node. js, kết quả là đơn giản hóa quy trình ủy quyền

Thiết lập nút. ứng dụng js

Trước khi chúng tôi bắt đầu với Cerbos, bạn sẽ cần tạo một Nút mới. js (hoặc sử dụng ứng dụng hiện có). Hãy thiết lập một bài đăng trên blog Node. ứng dụng js làm ví dụ của chúng tôi

Xác định quyền của người dùng

Ứng dụng đăng bài trên blog sẽ có hai vai trò. thành viên và người điều hành

Vai trò thành viên sẽ có các quyền sau

  • tạo một bài đăng blog mới
  • cập nhật các bài đăng trên blog được tạo bởi thành viên
  • xóa bài đăng trên blog được tạo bởi thành viên
  • xem tất cả các bài đăng trên blog được tạo bởi tất cả các thành viên
  • xem một bài đăng trên blog được tạo bởi bất kỳ thành viên nào

Vai trò người điều hành sẽ có các quyền sau

  • xem tất cả các bài đăng trên blog được tạo bởi tất cả các thành viên
  • xem một bài đăng trên blog được tạo bởi bất kỳ thành viên nào
  • vô hiệu hóa và kích hoạt một bài viết độc hại

Thành viên và người điều hành không thể thực hiện bất kỳ hành động nào nếu họ bị vô hiệu hóa

Tạo ứng dụng

Bước 1

Khởi chạy thiết bị đầu cuối hoặc công cụ dòng lệnh của bạn và tạo một thư mục cho ứng dụng mới

mkdir blogpost

Bước 2

Di chuyển vào thư mục bài đăng trên blog và chạy lệnh bên dưới—tệp

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
0 sẽ được tạo

npm init -y

Bước 3

Mở tệp

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
0 và dán như sau

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}

Hai gói chính nằm trong phần phụ thuộc của

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
0—Cerbos và Express

  • Cerbos là gói ủy quyền chịu trách nhiệm tạo vai trò và quyền
  • Express là một nút. js được sử dụng để thiết lập và tạo các ứng dụng phía máy chủ nhanh hơn

Trong

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
3, có bốn gói. Chai, Chai HTTP, Mocha và Nodemon. Chai, Chai HTTP và Mocha được sử dụng để chạy các tập lệnh kiểm tra tự động trong và sau quá trình phát triển. Nodemon được sử dụng để đảm bảo máy chủ ứng dụng được khởi động lại bất cứ khi nào có thay đổi đối với bất kỳ tệp nào trong quá trình phát triển

Bước 4

Chạy

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
4 để cài đặt các gói trong gói. json

Bước 5

Tạo các tệp sau

  • {
      "name": "blogpost",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "nodemon index.js",
        "test": "mocha --exit --recursive test/**/*.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "@cerbos/grpc": "^0.6.0",
        "express": "^4.17.1"
      },
      "devDependencies": {
        "chai": "^4.3.4",
        "chai-http": "^4.3.0",
        "mocha": "^9.0.3",
        "nodemon": "^2.0.12"
      }
    }
    
    5, chứa cấu hình cơ sở của ứng dụng demo
  • {
      "name": "blogpost",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "nodemon index.js",
        "test": "mocha --exit --recursive test/**/*.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "@cerbos/grpc": "^0.6.0",
        "express": "^4.17.1"
      },
      "devDependencies": {
        "chai": "^4.3.4",
        "chai-http": "^4.3.0",
        "mocha": "^9.0.3",
        "nodemon": "^2.0.12"
      }
    }
    
    6, chứa tất cả các tuyến đường cần thiết trong ứng dụng demo
  • {
      "name": "blogpost",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "nodemon index.js",
        "test": "mocha --exit --recursive test/**/*.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "@cerbos/grpc": "^0.6.0",
        "express": "^4.17.1"
      },
      "devDependencies": {
        "chai": "^4.3.4",
        "chai-http": "^4.3.0",
        "mocha": "^9.0.3",
        "nodemon": "^2.0.12"
      }
    }
    
    7, xuất cơ sở dữ liệu demo. Vì lợi ích của bản trình diễn này, bạn sẽ sử dụng một mảng để lưu trữ dữ liệu—bạn có thể sử dụng bất kỳ hệ thống cơ sở dữ liệu nào bạn muốn
  • {
      "name": "blogpost",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "start": "nodemon index.js",
        "test": "mocha --exit --recursive test/**/*.js"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "@cerbos/grpc": "^0.6.0",
        "express": "^4.17.1"
      },
      "devDependencies": {
        "chai": "^4.3.4",
        "chai-http": "^4.3.0",
        "mocha": "^9.0.3",
        "nodemon": "^2.0.12"
      }
    }
    
    8, chứa logic ủy quyền của Cerbos

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
9

Sau đó, dán các mã sau vào các tệp tương ứng

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
3____14
{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
5

Cơ sở dữ liệu demo bao gồm năm người dùng, bao gồm ba thành viên và hai người điều hành. Trong ba thành viên, có hai thành viên tích cực và một thành viên bị khóa. Trong số hai người điều hành, một người là người điều hành tích cực và người kia là người điều hành bị chặn

Trong thời gian chờ đợi,

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
8 sẽ chứa một giàn giáo trống để xem ứng dụng hoạt động như thế nào, trước khi tích hợp gói ủy quyền Cerbos

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
7

Bước 6

Ứng dụng demo đã được thiết lập thành công. Bây giờ là lúc để xem ứng dụng trông như thế nào trước khi tích hợp gói ủy quyền Cerbos

Khởi động máy chủ bằng lệnh bên dưới

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
31

Bạn sẽ thấy thông tin sau trong thiết bị đầu cuối của mình để cho biết ứng dụng của bạn đang chạy trên cổng 8000

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
9

Kiểm tra ứng dụng mà không được phép

Bây giờ là lúc để kiểm tra ứng dụng. Bạn có thể sử dụng bất kỳ ứng dụng khách HTTP nào mà bạn chọn, chẳng hạn như Postman, Insomnia hoặc cURL. Đối với ví dụ này, chúng tôi sẽ sử dụng cURL

Thực hiện các yêu cầu sau—bạn sẽ thấy không có giới hạn nào. Thay đổi user_ID từ 1 đến 5 và bạn sẽ nhận được phản hồi hợp lệ

Tạo bài đăng

npm init -y
0

Cập nhật bài viết

npm init -y
1

Xem tất cả bài viết

npm init -y
0

Xem một bài đăng

npm init -y
1

cờ đăng

npm init -y
2

Xóa bài đăng

npm init -y
3

Tích hợp ủy quyền Cerbos

Khi mọi thứ ổn định, ứng dụng được mở cho các hành động được ủy quyền và trái phép. Bây giờ, đã đến lúc triển khai Cerbos để đảm bảo người dùng chỉ thực hiện các hoạt động được ủy quyền

Để bắt đầu, cần tạo một thư mục chính sách để lưu trữ các chính sách của Cerbos. Cerbos sử dụng các chính sách này để xác định người dùng nào có quyền truy cập vào tài nguyên nào. Trong thư mục bài đăng trên blog, hãy chạy lệnh bên dưới để tạo thư mục có tên là Cerbos. Điều này sẽ chứa thư mục chính sách

npm init -y
4

Tiếp theo, chuyển sang thư mục chính sách và tạo hai tệp YAML chính sách.

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
32 và
{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
33

Các dẫn xuất_roles. yaml Mô tả tệp

Vai trò phái sinh cho phép bạn tạo vai trò động từ một hoặc nhiều vai trò chính. Ví dụ: thành viên vai trò được phép xem tất cả các bài đăng trên blog do các thành viên khác tạo nhưng không được phép thực hiện bất kỳ thao tác chỉnh sửa nào. Để cho phép chủ sở hữu của một bài đăng trên blog cũng là thành viên thực hiện các chỉnh sửa trên bài đăng trên blog của họ, vai trò dẫn xuất được gọi là chủ sở hữu được tạo để cấp quyền này

Bây giờ hãy dán mã bên dưới vào

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
32 của bạn

npm init -y
5
  • apiVersion là phiên bản hiện tại của vai trò bắt nguồn từ Cerbos
  • dẫn xuấtRoles chứa danh sách các vai trò người dùng mà ứng dụng của bạn sẽ được sử dụng;
  • dẫn xuấtRoles (tên) cho phép bạn phân biệt giữa nhiều tệp vai trò dẫn xuất trong ứng dụng có thể được sử dụng trong chính sách tài nguyên của bạn
  • Vai trò dẫn xuất (định nghĩa) là nơi bạn sẽ tìm thấy tất cả các vai trò dự kiến ​​sẽ được sử dụng trong ứng dụng
  • tên là tên được đặt cho các vai trò dẫn xuất được tạo; . Với sự trợ giúp của các vai trò dẫn xuất, có thể tạo một vai trò khác sẽ cấp quyền cho tài nguyên
  • parentRoles là các vai trò mà vai trò dẫn xuất áp dụng, e. g. thành viên và người điều hành
  • điều kiện là một tập hợp các biểu thức phải đúng để vai trò dẫn xuất có hiệu lực. Ví dụ: bạn có thể tạo vai trò dẫn xuất từ ​​thành viên và người kiểm duyệt, sau đó thêm điều kiện rằng vai trò dẫn xuất chỉ có thể có hiệu lực nếu thành viên hoặc người kiểm duyệt đang hoạt động. Điều này có thể được thực hiện thông qua phím điều kiện. Để biết thêm thông tin về các điều kiện, hãy xem hướng dẫn về điều kiện tại đây

tài nguyên_post. yaml Mô tả tệp

Tệp chính sách tài nguyên cho phép bạn tạo quy tắc cho vai trò gốc/vai trò dẫn xuất đối với các hành động khác nhau có thể được thực hiện trên tài nguyên. Các quy tắc này thông báo cho các vai trò nếu họ có quyền thực hiện một số hành động nhất định trên tài nguyên

Dán đoạn mã sau vào

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
33 của bạn

npm init -y
6

Tệp chính sách tài nguyên chứa các quyền mà mỗi vai trò hoặc vai trò dẫn xuất có thể có quyền truy cập

  • apiVersion là phiên bản dành cho tệp chính sách tài nguyên
  • resourcePolicy giữ tất cả các thuộc tính chính của chính sách tài nguyên
  • phiên bản được sử dụng để xác định chính sách sẽ được sử dụng trong ứng dụng;
  • importDerivedRoles được sử dụng để chỉ định loại vai trò dẫn xuất mà bạn muốn nhập vào tệp chính sách tài nguyên
  • tài nguyên chứa tài nguyên bạn muốn áp dụng các vai trò và quyền cho
  • quy tắc là nơi bạn sẽ đặt quy tắc cho các hoạt động khác nhau, trên cơ sở quyền của người dùng
  • hành động là các hoạt động được thực hiện
  • tác dụng là cho biết có cấp quyền truy cập cho người dùng vào hoạt động hay không, dựa trên vai trò và vai trò dẫn xuất (và điều kiện, nếu chúng tồn tại)
  • dẫn xuấtRoles chứa các vai trò dẫn xuất mà bạn đã tạo trong dẫn xuất_roles của mình. tập tin yaml
  • vai trò là vai trò mặc định tĩnh được sử dụng bởi ứng dụng của bạn
  • điều kiện chỉ định các điều kiện phải được đáp ứng trước khi có thể cấp quyền truy cập cho hoạt động

Để đảm bảo các tệp YAML của chính sách của bạn không chứa lỗi, hãy chạy lệnh này trong thư mục gốc của bài đăng trên blog. Nếu nó không trả về bất cứ thứ gì, thì nó không có lỗi

npm init -y
7

Khởi động máy chủ Cerbos

Bây giờ bạn đã tạo thành công các tệp chính sách mà Cerbos sẽ sử dụng để ủy quyền cho người dùng trong ứng dụng của bạn. Tiếp theo, đã đến lúc khởi động máy chủ Cerbos bằng cách chạy lệnh bên dưới trong thiết bị đầu cuối của bạn

npm init -y
8

Máy chủ Cerbos của bạn sẽ chạy tại http. //máy chủ cục bộ. 3592. Truy cập liên kết và nếu không có lỗi nào được trả về thì máy chủ đang hoạt động tốt

Triển khai Cerbos vào ứng dụng

Bây giờ là lúc để lấp đầy giàn giáo trống trong tệp

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
8

npm init -y
9

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
37 là bộ điều khiển kiểm tra xem người dùng có quyền truy cập vào một số hành động nhất định hay không. Nó chứa các phím sau

  • Các hành động chứa tất cả các hành động có sẵn mà bạn đã tạo trong tệp chính sách tài nguyên
  • Tài nguyên cho phép bạn chỉ ra chính sách tài nguyên nào bạn muốn sử dụng cho yêu cầu tài nguyên từ nhiều tệp chính sách tài nguyên
  • Chính sáchVersion trong khóa tài nguyên ánh xạ tới phiên bản trong tệp chính sách tài nguyên
  • loại ánh xạ tới khóa tài nguyên trong tệp chính sách tài nguyên. Các phiên bản có thể chứa nhiều yêu cầu tài nguyên mà bạn muốn kiểm tra đối với tệp chính sách tài nguyên. Trong bản demo, bạn chỉ đang kiểm tra tài nguyên bài đăng trên blog
  • Hiệu trưởng chứa thông tin chi tiết về người dùng thực hiện yêu cầu tài nguyên tại trường hợp đó

Phương thức

{
  "name": "blogpost",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "nodemon index.js",
    "test": "mocha --exit --recursive test/**/*.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cerbos/grpc": "^0.6.0",
    "express": "^4.17.1"
  },
  "devDependencies": {
    "chai": "^4.3.4",
    "chai-http": "^4.3.0",
    "mocha": "^9.0.3",
    "nodemon": "^2.0.12"
  }
}
38 được sử dụng để kiểm tra xem người dùng/hiệu trưởng có được phép thực hiện hành động được yêu cầu tại trường hợp đó không

Kiểm tra Ủy quyền Cerbos với Ứng dụng Bài đăng trên Blog

Bạn đã thiết lập thành công các vai trò và quyền cần thiết cho từng thao tác trong ứng dụng demo bài đăng trên blog CRUD. Bây giờ là lúc để kiểm tra lại các tuyến đường và quan sát điều gì sẽ xảy ra, sử dụng bảng bên dưới làm hướng dẫn để kiểm tra

actionuser_iduser_roleuser_statusresponsetạo, xem. tất cả các điểm. thành viên duy nhất1 và 2hoạt độngOKTất cả hành động3thành viên bị chặnKhông được ủy quyềnTất cả hành động5người điều hành bị chặnKhông được ủy quyềnCập nhật bài đăng của chính mình1thành viênhoạt độngOKCập nhật bài đăng của người dùng khác1thành viênhoạt độngKhông được ủy quyền

Bảng trên hiển thị một tập hợp con các quyền khác nhau cho mỗi người dùng được triển khai trong ứng dụng demo

Bạn có thể sao chép kho lưu trữ ứng dụng demo từ GitHub. Khi bạn đã sao chép nó, hãy làm theo các hướng dẫn đơn giản trong tệp README. Bạn có thể chạy tập lệnh kiểm tra tự động để kiểm tra các quyền và vai trò người dùng khác nhau

Phần kết luận

Trong bài viết này, bạn đã biết được những lợi ích của việc ủy ​​quyền Cerbos bằng cách triển khai nó trong một Node demo. ứng dụng js. Bạn cũng đã tìm hiểu các tệp chính sách khác nhau của Cerbos và tầm quan trọng của chúng trong việc đảm bảo ủy quyền hoạt động bình thường

Ủy quyền trong nút js là gì?

Nói một cách đơn giản, xác thực là quá trình xác minh người dùng là ai, trong khi ủy quyền là quá trình xác minh những gì họ có quyền truy cập . Ban đầu, chúng tôi sẽ chỉ kiểm tra mã thông báo trong tiêu đề yêu cầu cho các tuyến bị hạn chế, sau đó cho phép hoặc từ chối yêu cầu.

Sự khác biệt giữa xác thực và ủy quyền trong nút js là gì?

Xác thực được thực hiện trước quy trình ủy quyền, trong khi quy trình ủy quyền được thực hiện sau quy trình xác thực . Trong quá trình xác thực, danh tính của người dùng được kiểm tra để cung cấp quyền truy cập vào hệ thống.

Ủy quyền trong js là gì?

Sau khi người dùng đăng nhập, một yêu cầu dữ liệu sẽ được gửi bởi ứng dụng khách với mã thông báo JWT đã ký (để thông báo cho máy chủ đang yêu cầu dữ liệu). Về phía máy chủ, chúng tôi kiểm tra xem JWT được cung cấp có hợp lệ hay không, sau đó chúng tôi kiểm tra xem người dùng có được phép xem dữ liệu được yêu cầu hay không (bước này là .

Xác thực nào tốt nhất trong nút js?

Passport js là thư viện xác thực người dùng JavaScript cực kỳ linh hoạt dành cho Node. js. Thư viện này có thể được đưa vào bất kỳ ứng dụng dựa trên Express nào mà không có bất kỳ hạn chế nào. Thư viện này sử dụng các chiến lược khác nhau để xác thực người dùng.