示例#1
0
 public function onRequest(Request $request)
 {
     $session = $request->getSession();
     list($id, $role) = $session->get('user', array(null, 'ROLE_ANONYMOUS'));
     if (null === $id && $request->cookies->has(Remember::REMEMBER_ME)) {
         if ($this->remember->check($request->cookies->get(Remember::REMEMBER_ME))) {
             list($id, $role) = $this->remember->getIt();
             $session->set('user', array($id, $role));
         }
     }
     $this->provider->setRole($role);
     if (!$this->provider->isAllowed($request->getPathInfo())) {
         throw new Exception\AccessDeniedException("Access denied to " . $request->getPathInfo());
     }
     if (null !== $id) {
         // Ban check
         $clientIp = $request->getClientIp();
         $ban = Ban::findActive($id, $clientIp);
         if (!empty($ban)) {
             throw new BannedException($ban[0], Response::HTTP_FORBIDDEN);
         }
         // User loading.
         $user = User::find($id);
         if (null !== $user) {
             $user->ip = $clientIp;
             $user->save();
             $this->provider->setUser($user);
             $this->provider->setAuthenticated(true);
         }
     }
 }
示例#2
0
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->add('user', 'user', array('label' => 'User ID', 'required' => false));
     $builder->add('ip', 'text', array('label' => 'IP', 'required' => false));
     $builder->add('howLong', 'choice', array('label' => 'On how long', 'choices' => Ban::howLongChoices()));
     $builder->add('reason', 'textarea', array('label' => 'Reason', 'required' => false));
 }
示例#3
0
文件: Bans.php 项目: elfchat/elfchat
 /**
  * @Route("/remove/{id}", name="remove_ban", requirements={"id": "\d+"})
  */
 public function removeBan($id)
 {
     if ($ban = Ban::find($id)) {
         $ban->delete();
         $this->app->session()->getFlashBag()->add('success', $this->app->trans('Ban was deleted.'));
     }
     return $this->app->redirect($this->app->url('moderator_bans'));
 }