我的意思是&条件'特权是,例如:假设我们有事件e。创建活动e的用户应该能够删除活动e并邀请其他用户加入活动e,但仅限该用户。
从我看过的教程中,权限和角色看起来是静态的,例如: 医生有一个角色医生,有权限x,y和z,但那就是......非常静态。
是否有一种使用Spring Security有条件地管理权限的简单方法?
或者这会更适合前端吗?例如,该视图会显示“删除”事件'按钮仅当该特定事件的资源数据确认事件创建者的ID实际上是存储在会话存储器/钥匙串中的相同ID /当前登录用户的任何事物类型。
由于
答案 0 :(得分:1)
首先,
或者这会更适合前端吗? ...显示删除事件'按钮仅在......
NO。不是一个可靠的防线,没有。
那可能取决于技术堆栈,架构等,但根据经验,你不应该这样做。我没有编写servlets / jsp,但我在富客户端(swing)应用程序中使用了spring security,即使我们拥有所有控件(我的意思是,我们可以保证用户无法访问有些功能没有别的办法,然后单击按钮),我们保护了我们的模型,而不是gui。
无论您怎么称呼它,都无法通过按钮点击事件或直接在测试中调用它来致电Entity#delete
。对于Web应用程序,假设您没有显示按钮,但是攻击者知道该按钮会显示example.com/entity?action=delete
URL或类似内容,即使您不进行渲染,他也可以直接访问它按钮。
关于主要问题,大致来说,弹簧安全性有两个部分:RBAC和ACL。您需要的似乎是ACL部分。阅读有关domain security的一些文章和文章,它是一个非常复杂的东西,但它确实适合您的需要(当然,需要付出一些努力)。您在第一段中描述的内容可以轻松实现,因为每个对象都拥有它并且可以被利用。
编辑:只是为了让未来的访问者清楚。要点是:前端应该有一些逻辑,但不能是唯一的安全逻辑。当然,没有必要使用按钮来处理UI,从而导致您无法访问的功能。