Security 如何从控制器更新实体字段?

Security 如何从控制器更新实体字段?,security,symfony,Security,Symfony,我有一个名为Task的实体。还有字段、设置器和获取器。这个实体运转良好。从角色管理,我可以更新,创建等。。。但现在我有了解决控制器…在ROLE_用户的索引操作中,我想要显示表单,它应该更新任务实体中的字段“status”。我怎么能做到 我可以在安全文件中为角色\用户提供更新任务的权限吗?如果是,请给我举个例子。我试试这个: - { path: ^/task/edit, roles: ROLE_ADMIN } - { path: ^/task/edit, roles: ROLE_USER } 但

我有一个名为Task的实体。还有字段、设置器和获取器。这个实体运转良好。从角色管理,我可以更新,创建等。。。但现在我有了解决控制器…在ROLE_用户的索引操作中,我想要显示表单,它应该更新任务实体中的字段“status”。我怎么能做到

我可以在安全文件中为角色\用户提供更新任务的权限吗?如果是,请给我举个例子。我试试这个:

- { path: ^/task/edit, roles: ROLE_ADMIN }
- { path: ^/task/edit, roles: ROLE_USER }

但是它不起作用。

删除带有角色\u ADMIN的第一行,它应该会起作用。当使用默认配置角色\u ADMIN扩展角色\u USER时,这意味着如果将路由设置为可由角色\u用户访问,则其自动也可由角色\u ADMIN访问

在您的配置中,首先匹配角色为_ADMIN的路由,因此您将得到403错误,并且您的第二个路由将永远不会被使用

如果要保护其余操作,并且仅允许访问“编辑”,请执行以下操作:

- { path: ^/task/edit, roles: ROLE_USER }
- { path: ^/task, roles: ROLE_ADMIN }

这样,更具体的路由/task/edit会检查用户,而以/task开头的所有其他路由都需要ROLE_ADMIN.

但所有路由都可以放入url“localhos/app.dev/task”并查看任务。@JohnyOggy我相应地更改了答案。根据您的示例,我假设您只关心/task/edit。您也可以将每个路由放在列表中,例如
路径:^/task$
路径:^/task/create
等等,但这可能很难维护。当我键入app_dev.php/task/1/edit时,我会拒绝访问。感谢您现在帮助我的安全文件:-{path:^/task/edit,roles:ROLE_USER}-{path:^/task/new,roles:ROLE_ADMIN}-{path:^/task/show,roles:ROLE_USER}-{path:^/task,roles:ROLE_ADMIN}不应该是
app dev.php/task/edit/1
,即首先是操作,然后是参数吗<代码>app_dev.php/task/1/edit与我的示例不匹配,并且与您上一次发布的路由(^/task with ROLE_ADMIN)应该匹配,因此您应该拒绝访问。