- python 3.10+
pip install pip install git+ssh://git@github.com/expertspec/expert_core.git@{tag}fromfastapiimportFastAPIfromexpert_core.pluginsimportinit_keycloakapp=FastAPI()
@app.on_event("startup")asyncdefstartup():
awaitinit_keycloak(app)fromfastapiimportDependsfromexpert_core.plugins.keycloakimportdepends_authentication, OIDCUser@app.get("/user")asyncdefget_user(user: OIDCUser=Depends(depends_authentication())):
user_id=user.subfromfastapiimportDepends, Pathfrompydantic.typesimportUUID4fromexpert_core.plugins.keycloakimportdepends_authentication, depends_idp, Keycloak, OIDCUser@app.post("/chat/{item_id}/set")asyncdefset_user_permissions(
chat_id: UUID4=Path(..., alias="item_id"),
user: OIDCUser=Depends(depends_authentication()),
idp: Keycloak=Depends(depends_idp)
):
_chat_id=str(chat_id)
awaitidp.update_permissions(user, chat_id, permissions="rw------")fromfastapiimportDepends, Pathfrompydantic.typesimportUUID4fromexpert_core.plugins.keycloakimportdepends_permissions, OIDCUser@app.get("/chat/{chat_id}/get")asyncdefcheck_user_permissions(
chat_id: UUID4,
user: OIDCUser=Depends(depends_permissions("rw.*", param="chat_id", in_="path")),
):
passfromfastapiimportDepends, Pathfrompydantic.typesimportUUID4fromexpert_core.plugins.keycloakimportdepends_authentication, depends_idp, Keycloak, OIDCUser@app.delete("/chat/{item_id}/unset")asyncdefunset_user_permissions(
chat_id: UUID4=Path(..., alias="item_id"),
user: OIDCUser=Depends(depends_authentication()),
idp: Keycloak=Depends(depends_idp)
):
_chat_id=str(chat_id)
awaitidp.update_permissions(user, chat_id)
# orawaitidp.update_permissions(user, chat_id, permissions=None)
# orawaitidp.update_permissions(user, chat_id, permissions="")fromfastapiimportDepends, Pathfrompydantic.typesimportUUID4fromexpert_core.plugins.keycloakimportdepends_authentication, depends_idp, Keycloak, OIDCUser@app.post("/chat/{chat_id}/message/{message_id}/set")asyncdefset_inherit_user_permissions(
chat_id: UUID4,
message_id: UUID4,
user: OIDCUser=Depends(depends_authentication()),
idp: Keycloak=Depends(depends_idp)
):
_chat_id=str(chat_id)
_message_id=str(message_id)
awaitidp.update_permissions(user, chat_id, _message_id, permissions="rwx-----")fromfastapiimportDepends, Pathfrompydantic.typesimportUUID4fromexpert_core.plugins.keycloakimportdepends_permissions, OIDCUser@app.get("/chat/{chat_id}/message/{message_id}/get")asyncdefcheck_inherit_user_permissions(
chat_id: UUID4,
message_id: UUID4,
user: OIDCUser=Depends(
depends_permissions(
"r.*",
param=["chat_id", "message_id"],
in_="path",
),
),
''' or user: OIDCUser = Depends( depends_permissions( "r.*", param=["chat_id", "message_id"], in_=["path", "path"], ), ), '''
):
passother examples:
depends_permissions("rw.*", param="chat_id", in_="body")
depends_permissions("rw.*", param=["chat_id", "message_id"], in_="body")
depends_permissions("rw.*", param=["chat_id", "message_id"], in_=["body", "path"])
depends_permissions("rw.*", param=["chat_id", "message_id", "user_id"], in_=["path", "query", "body"])