あなたはより厳密にあなたが必要とする許可< - >プロフィールを見ると思います。基本的にほとんどの場合、私が協力してくれたほとんどの場合、何かが許可されていないと、許可されていない(または許可されていない何かが許可されていれば、より危険です)という前提がありました。データの量を大幅に削減するため、保存する必要があります。
あなたはこの
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class Permission
{
// id column
/**
* @ORM\Column(type="string")
* @var string
*/
private $name;
/**
* @return string
*/
public function getName()
{
return $this->name;
}
}
と
<?php
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class User
{
// id column
// name column
/**
* @ORM\ManyToMany(targetEntity=Permission::class)
* @ORM\JoinTable(name="allowed_permissions",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="permission_id", referencedColumnName="id")}
* )
* @var Permission[]|Collection
*/
private $allowedPermissions;
/**
* @return Permission[]
*/
public function getAllowedPermissions()
{
return $this->allowedPermissions->toArray();
}
}
のようなあなたのエンティティを作成するときだから、単に持っていることのいずれかのニーズなし
<?php
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
class Authorizator implements AuthorizationCheckerInterface
{
/**
* @param string $name
* @param User $user
* @return bool
*/
public function isGranted($name, $user)
{
foreach ($user->getAllowedPermissions() as $permission) {
if ($permission->getName() === $name) {
return TRUE;
}
}
return FALSE;
}
}
としてインターフェイスAuthorizationCheckerInterfaceための独自のクラスを実装することができますデータベースのアクセス権を拒否します。
はい、余分な列を持つ多対多の関係です:http://www.prowebdev.us/2012/07/symfnoy2-many-to-many-relation-with.html – DOZ
これは実際には何ですか注文には商品があるかどうかわからないので、私のプロファイルには本当に必要なすべての権限が永久に必要です。 – Flozza
ProfilePermissionValueエントリにはどの値を設定できますか? – lxg