Dan*_*ant 7 php symfony api-platform.com symfony4
如何在创建时自动将当前授权用户添加到资源 ( POST)。
我正在使用 JWT 身份验证,并且 /api/ 路由受到未授权用户的保护。我想设置它,以便当经过身份验证的用户创建新资源(即通过向 发送POST请求/api/articles)时,新创建的Article资源与经过身份验证的用户相关。
我目前正在使用EventSubscriber每个资源类型的自定义来从令牌存储中添加用户。
这是订阅者基类的要点:https : //gist.github.com/dsuurlant/5988f90e757b41454ce52050fd502273
以及扩展它的实体订阅者:https : //gist.github.com/dsuurlant/a8af7e6922679f45b818ec4ddad36286
但是,例如,如果实体构造函数需要用户作为参数,则这不起作用。
例如
class Book {
public User $owner;
public string $name;
public class __construct(User $user, string $name) {
$this->owner = $user;
$this->name = $name;
}
}
Run Code Online (Sandbox Code Playgroud)
如何在实体创建时自动注入授权用户?
正如 @nealio82 和 @lavb 所说,您应该看看 Gedmo\Blameable,它可以帮助您处理属性createdBy或updatedBy存储User创建资源的人的位置。
Blameable StofDoctrineExtensionsBundle
然后要处理访问,请查看 Voters,它对于处理安全性和不同的访问非常有用。
例如
图书实体
...
use Gedmo\Mapping\Annotation as Gedmo;
class Book {
...
/**
* @var string $createdBy
*
* @Gedmo\Blameable(on="create")
* @ORM\Column
*/
public User $owner;
public function getOwner() {
return $this->owner;
}
public function setOwner(User $owner) {
$this->owner = $owner
}
}
Run Code Online (Sandbox Code Playgroud)
src/安全/投票者/BookVoter
...
use Gedmo\Mapping\Annotation as Gedmo;
class Book {
...
/**
* @var string $createdBy
*
* @Gedmo\Blameable(on="create")
* @ORM\Column
*/
public User $owner;
public function getOwner() {
return $this->owner;
}
public function setOwner(User $owner) {
$this->owner = $owner
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1337 次 |
| 最近记录: |