我试图找出在单页应用程序中处理权限的正确方法,该应用程序直接与几个实现 HATEOAS 的 RESTful API 对话。
举个例子:
“作为我的应用程序的用户,我可以查看、启动和暂停作业,但不能停止它们。”
底层的 REST API 有以下资源:
/jobs/{id} 接受 GET 和 PUT。GET 返回一个作业模型,PUT 接受一个作业模型作为请求主体,格式如下:
{
"_links" : {
"self" : "/jobs/12345678"
}
"id" : 12345678,
"description" : "foo job",
"state" : "STOPPED"
}
接受的工作状态可以是:休眠 | 运行 | 暂停 | 停了下来。
要求说在 UI 上我必须有按钮:
开始、暂停、停止
...并且仅根据登录用户的权限显示。
从 API 的角度来看,一切都是服务器上的底层逻辑,确保用户在发出请求时无法将状态更新为 STOPPED 状态(可能返回 401)。
通知应用程序/ UI 用户权限的最佳方式是什么,以便它可以隐藏用户无权操作的任何按钮?
API 是否应该提供权限列表,可能类似于:
{
"_links" : {
"self" : "/permissions",
"jobs" : "/jobs"
}
"permissions" : {
"job" : ["UPDATE", "DELETE"],
"job-updates" : ["START", "PAUSE"]
}
}
或者 API 是否应该更改,以便权限反映在 HATEOS 链接中,可能类似于:
{
"_links" : {
"self" : "/jobs/12345678",
"start" : "/jobs/12345678/state?to=RUNNING",
"pause" : "/jobs/12345678/state?to=PAUSED",
}
"id" : 12345678,
"description" : "foo job",
"state" : "DORMANT"
}
还是应该以完全不同的方式完成?
更新