メインコンテンツにスキップ

公開されているCasbin API

はじめに

あなたのアプリケーションのフロントエンドがログインしているユーザーのaccess_tokenを取得し、いくつかのアクセスのためにユーザーを認証したいとしましょう。 これらのAPIを使用するためにHTTPリクエストヘッダーにaccess_tokenを単純に配置することはできません。なぜならCasdoorはアクセス許可をチェックするためにAuthorizationフィールドを使用するからです。 Casdoorによって提供される他のAPIと同様に、AuthorizationフィールドはアプリケーションクライアントIDとシークレットで構成され、Basic HTTP Authentication Schemeを使用します。 それはAuthorization: Basic <Your_Application_ClientId> <Your_Application_ClientSecret>のように見えます。 この理由から、Casbin APIはアプリケーションのバックエンドサーバーによって呼び出されるべきです。 それを行う手順はこちらです。

例としてデモサイトのapp-vue-python-exampleアプリケーションを取り上げると、認証ヘッダーは次のようになります:Authorization: Basic 294b09fbc17f95daf2fe dd8982f7046ccba1bbd7851d5c1ece4e52bf039d

  1. フロントエンドはHTTPリクエストヘッダーを通じてaccess_tokenをバックエンドサーバーに渡します。
  2. バックエンドサーバーはaccess_tokenからユーザーIDを取得します。

事前に注意しておくと、これらのインターフェースは(今のところ)(sub, obj, act)モデル用にも設計されています。 URLパラメータのpermissionIdは適用された権限ポリシーのアイデンティティで、組織名と権限ポリシー名(すなわち組織名/権限名)で構成されます。 ボディは、権限のCasbinモデルによって定義されたリクエストフォーマットで、通常はそれぞれsubobjactを表します。

権限制御の強制を要求する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"
]