ข้ามไปยังเนื้อหาหลัก

เปิดเผย Casbin APIs

บทนำ

มาสมมติว่าแอปพลิเคชันหน้าบ้านของคุณได้รับ access_token ของผู้ใช้ที่เข้าสู่ระบบแล้ว และตอนนี้ต้องการตรวจสอบสิทธิ์การเข้าถึงของผู้ใช้ คุณไม่สามารถวาง access_token ลงในส่วนหัวของคำขอ HTTP เพื่อใช้ API เหล่านี้ได้ เพราะ Casdoor ใช้ฟิลด์ Authorization เพื่อตรวจสอบสิทธิ์การเข้าถึง เหมือนกับ API อื่นๆ ที่ Casdoor ให้บริการ, ฟิลด์ Authorization ประกอบด้วย id และ secret ของแอปพลิเคชัน, โดยใช้ Basic HTTP Authentication Scheme มันดูเหมือน Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret> ด้วยเหตุผลนี้, Casbin APIs ควรถูกเรียกใช้โดยเซิร์ฟเวอร์แบ็กเอนด์ของแอปพลิเคชัน นี่คือขั้นตอนวิธีการทำ

เอาแอปพลิเคชัน app-vue-python-example ในเว็บไซต์ตัวอย่างเป็นตัวอย่าง, ส่วนหัวการอนุญาตควรเป็น: Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d

  1. หน้าบ้านส่ง access_token ไปยังเซิร์ฟเวอร์แบ็กเอนด์ผ่านส่วนหัวของคำขอ HTTP
  2. เซิร์ฟเวอร์แบ็กเอนด์ดึง user id จาก access_token

เป็นหมายเหตุล่วงหน้า, อินเทอร์เฟซเหล่านี้ยังถูกออกแบบ (ในตอนนี้) สำหรับโมเดล (sub, obj, act) ค่า permissionId ในพารามิเตอร์ URL เป็นตัวตนของนโยบายสิทธิ์ที่ใช้, ประกอบด้วยชื่อองค์กรและชื่อนโยบายสิทธิ์ (เช่น, ชื่อองค์กร/ชื่อสิทธิ์) เนื้อหาคือรูปแบบคำขอที่กำหนดโดยโมเดล Casbin ของสิทธิ์, โดยปกติแสดงถึง sub, obj และ act ตามลำดับ

นอกจากอินเทอร์เฟซ API สำหรับการขอบังคับใช้การควบคุมสิทธิ์แล้ว, Casdoor ยังมีอินเทอร์เฟซอื่นๆ ที่ช่วยให้แอปพลิเคชันภายนอกได้รับข้อมูลนโยบายสิทธิ์, ซึ่งก็มีการแสดงรายการที่นี่ด้วย

บังคับใช้

คำขอ:

curl --location --request POST 'http://localhost:8000/api/enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '["example-org/example-user", "example-resource", "example-action"]'

คำตอบ:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
true
],
"data2": null
}

BatchEnforce

คำขอ:

curl --location --request POST 'http://localhost:8000/api/batch-enforce?permissionId=example-org/example-permission' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>' \
--data-raw '[["example-org/example-user", "example-resource", "example-action"], ["example-org/example-user2", "example-resource", "example-action"], ["example-org/example-user3", "example-resource", "example-action"]]'

คำตอบ:

{
"status": "ok",
"msg": "",
"sub": "",
"name": "",
"data": [
[
true,
true,
false
]
],
"data2": null
}

GetAllObjects

คำขอ:

curl --location --request GET 'http://localhost:8000/api/get-all-objects' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

คำตอบ:

[
"app-built-in"
]

GetAllActions

คำขอ:

curl --location --request GET 'http://localhost:8000/api/get-all-actions' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

คำตอบ:

[
"read",
"write",
"admin"
]

GetAllRoles

คำขอ:

curl --location --request GET 'http://localhost:8000/api/get-all-roles' \
--header 'Authorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>'

คำตอบ:

[
"role_kcx66l"
]