FOS 用户包:访问其他用户配置文件:"This user does not have access to this section."

FOS User Bundle: access other user profile: "This user does not have access to this section."

我正在尝试为网站其他成员的成员详细信息设置一个简单的操作;我的控制器现在看起来像这样:

public function modalProfileAction($id) {
    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->findUserBy(array('id' => $id));
    if (!is_object($user) || !$user instanceof UserInterface) {
        throw new AccessDeniedException('This user does not have access to this section.');
    }
    return $this->render('TESTUserBundle:Profile:modal_short_profile.html.twig', array(
        'user' => $user
    ));
}

这个动作是由JS触发的(AJAX方法GET)。我的路由是:

TEST_user_modal:
    pattern: /team-member/{id}
    defaults: { _controller: TESTUserBundle:User:modalProfile }
    methods:  [GET]
    requirements:
        id: \d+

我收到以下错误:"This user does not have access to this section." 有什么办法可以解决这个问题吗?我是在使用错误的方法还是应该包含安全问题? 欢迎提出想法

1)如果要获取当前登录用户,必须使用此代码获取用户数据:

$current_user=$this->getUser();

例如,如果你想获取当前用户的 id 和用户名可以使用这个:

$id=$current_user->getId();
$username=$current_user->getUsername();

2) 如果您想在管理面板中获取其他用户信息,您必须使用存储库获取信息:

public function showAction($id)
{
    $em = $this->getDoctrine()->getManager();

    $entity = $em->getRepository('UserBundle:User')->find($id);

    if (!$entity)
    {
        throw $this->createNotFoundException('Unable to find User entity.');
    }



    return $this->render('UserBundle:User:show.html.twig', array(
                'entity' => $entity,
    ));
}

希望对你有所帮助!

我对你的问题有些迷惑,但阅读你的逻辑也让我有些困惑。

我对你所做的事情的解释是:

  • 正在发送请求以根据用户 ID 检索用户。
  • 使用 FOSUserBundle 检索用户信息。
  • 正在验证检索到的信息是用户的一个实例 class。
  • Return正在获取用户信息。

我的问题是为什么要验证从用户管理器返回的对象是否是用户的实例?您是否正在尝试验证请求是否来自具有适当权限的有效登录用户?如果是这样,那么你根本就没有这样做。

2 我看到的解决方案是:

不验证登录用户。

  1. 发送请求以通过用户 ID 检索用户。
  2. 使用用户管理器检索信息。
  3. Return 信息。

返回信息前验证用户已登录

  1. 发送请求以通过用户 ID 检索用户。
  2. 验证请求来自已登录且具有适当权限的用户。
  3. 使用用户管理器检索信息
  4. Return 信息。

验证用户是:

public function modalProfileAction($id) {
    $users = $this->getUser();
    if (!is_object($users) || $users instanceof UserInterface) {
        throw new AccessDeniedException('You must be logged in to view this information.');
    }
    $user = $em->getRepository('UserBundle:User')->find($id);

    return $this->render('TESTUserBundle:Profile:modal_short_profile.html.twig', array(
        'user' => $user
    ));
}