我注意到即使是SuperAdmin用户也要求我的选民.
它是否按预期工作?
如果是的话,我认为SuperAdmin的理念是他们系统地拥有所有权利,因此我们不必逐个给予他们每个权限.在那种情况下,为什么不允许所有选民进入?
我总是要放
if ($user->isSuperAdmin()) {
return VoterInterface::ACCESS_GRANTED;
}
Run Code Online (Sandbox Code Playgroud)
在我的选民?
在Symfony 2(最新版本)下,我正在尝试更新我的实体:
php app/console doctrine:schema:upate --force
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息到我的终端:
[Symfony\Component\Config\Definition\Exception\InvalidConfigurationException]
"security.firewalls.access_control"下无法识别的选项"0,1,2,3"
我是Symfony的新手,我不知道在哪里可以搜索来解决这个问题.
这是security.yml文件:
# To get started with security, check out the documentation:
Run Code Online (Sandbox Code Playgroud)
安全性:编码器:FOS\UserBundle\Model\UserInterface:bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4
logout: true
anonymous: true
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
#main:
#anonymous: ~
# activate different ways …Run Code Online (Sandbox Code Playgroud) 假设我有/ localnetwork,我只想访问通常在此范围内具有ips的本地网络10.4.XX
security:
firewalls:
localnetwork:
pattern: ^/localnetwork
anonymous: ~
access_control:
- { path: ^/localnetwork, roles: IS_AUTHENTICATED_ANONYMOUSLY, ips : [ '10.4.X.X'] }
- { path: ^/localnetwork, roles: ROLE_NO_ACCESS}
Run Code Online (Sandbox Code Playgroud)
所以问题是:如何在symfony中完成.我应该添加什么而不是10.4.XX?
我有 2 个问题/疑虑
当我编辑用户时,我并不总是需要更改用户的密码,我该如何更改?
如何在数据库中保存加密的密码,到目前为止,我只能以纯文本形式成功,而且我找到的所有说明都不是最新的和/或对我有帮助。
所有其他文件都是通过命令创建的,到目前为止没有变化。
我使用 Symfony 5.2.7 和 php 8.0.6
src/Controller/Admin/AdminCrudController.php
<?php
namespace App\Controller\Admin;
use App\Entity\Admin;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextareaField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
class AdminCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Admin::class;
}
public function configureCrud(Crud $crud): Crud
{
return $crud
->setEntityPermission('ROLE_ADMIN')
;
}
public function configureFields(string $pageName): iterable
{
yield TextField::new('username');
yield TextField::new('password')
->hideOnIndex()
->setFormType(PasswordType::class)
;
yield ArrayField::new('roles');
}
}
Run Code Online (Sandbox Code Playgroud)
src/Entity/Admin.php
<?php
namespace App\Entity;
use App\Repository\AdminRepository;
use Doctrine\ORM\Mapping …Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关在Symfony 2中创建自定义选民的信息.根据这个页面,可以将一个对象传递给securitycontext的isGranted方法,我在自己的控制器中完成了这个方法:
$page = new Page();
if ( ! $securityContext->isGranted('CONTENT_CREATE', $page)) {
throw new AccessDeniedException('Fail');
}
Run Code Online (Sandbox Code Playgroud)
看起来像投票方法应该接受它,但是,当我在$ object参数上调用get_class而不是获取我的Page实体时,我得到:
Symfony的\分量\ HttpFoundation \请求
public function vote(TokenInterface $token, $object, array $attributes)
{
print_r(get_class($object)); die();
return VoterInterface::ACCESS_ABSTAIN;
}
Run Code Online (Sandbox Code Playgroud)
我的选民被定义为我的services.yml文件中的服务:
content_security.access.my_voter:
class: My\Bundle\Security\Authorization\Voter\MyVoter
arguments: ["@service_container"]
public: false
tags:
- { name: security.voter }
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
任何建议表示赞赏
谢谢
我有一个OAuth API,需要用户名和密码才能获取用户对象(资源所有者密码凭据流).我想要得到这个最终结果:
我遇到的问题是我似乎无法弄清楚如何以我能看到的最佳方式:用户提供商.UserProviderInterface要求实现loadUserByUsername(),但我不能这样做,因为我需要用户名和密码来获取用户对象.
我试图实现SimplePreAuthenticatorInterface,但我仍遇到同样的问题:在创建PreAuthenticated令牌后createToken(),我需要使用它进行身份验证authenticateToken(),我仍然无法通过UserProvider获取用户,因为我首先必须使用用户名/用于获取允许我获取User对象的访问令牌的密码.我考虑添加一个方法来登录我的UserProvider,它使用用户名/密码通过API登录,并将登录的令牌存储在数组中的任何用户名,然后通过该数组中的用户名获取令牌,但这并不是'感觉很对.
我是从错误的角度看它吗?我根本不应该使用PreAuthenticated令牌吗?
你好,我们正在尝试理解symfony中关于用户和用户角色及其工作原理的逻辑.我是symfony的新手,我遵循本教程:http: //symfony.com/doc/current/security/entity_provider.html
一切都在我的项目中完美无缺,但是当我查看数据库时,我有user表格,所有用户都注册了表格中的数据.
但是用户角色的表在哪里?symfony如何知道谁是ROLE_ADMIN谁,谁是谁ROLE_MODERATOR.如何为所有用户实现具有特定角色并将该角色保存在数据库中,以后我可以从某个管理面板更改它?ACL meybe?
美好的一天!我想登录我的用户,这是一项微不足道的任务.但问题是按值数组检查用户!
例如,我有实体用户和电话.用户有很多手机.所以我需要通过它拥有的所有手机登录用户.如何使用安全捆绑包的默认工具来完成?
我没有找到像我这样的问题,并阅读有关Symfony安全性的所有文档.我认为唯一要做的就是创建自定义提供程序.但我认为它不能解决我的问题.
任何想法,亲爱的symfoners?:)
我正在使用 Symfony 5.2 / PHP8
我的登录表单只是电子邮件 + 密码我使用自动“记住我”
firewalls:
endusers:
...
remember_me:
secret: '%kernel.secret'
lifetime: 604800 # 1 week in seconds
path: /
always_remember_me: true
Run Code Online (Sandbox Code Playgroud)
这没有任何问题
问题是在注册期间,我使用此代码段自动登录用户
$token = new UsernamePasswordToken(
user: $user,
credentials: null,
firewallName: 'endusers',
roles: $user->getRoles(),
);
$this->container->get('security.token_storage')->setToken($token);
$this->container->get('session')->set('_security_endusers', serialize($token))
Run Code Online (Sandbox Code Playgroud)
虽然这项工作,但不幸的是并没有触发记住我功能(这对我的理解是正常的,因为记住我通常会被此处未触发的“onloginsuccess”事件触发更高一级)
所以我想知道如何在上面的案例中也设置记住我
我正在尝试为我的用户的密码添加哈希值,我遵循了symfony 5.3 的指南,当我使用
\n->setPassword($passwordHasher->hashPassword(\n $user,\n \'contrase\xc3\xb1a\'\n ))\nRun Code Online (Sandbox Code Playgroud)\n在测试它是否有效时,我收到错误:
\n\n\n期望“Symfony\\Component\\Security\\Core\\User\\UserInterface”的实例作为第一个参数,但得到“App\\Entity\\Usuario”。
\n
我不明白,因为它的字面意思是按照指南所示写的。
\n这些是我的文件:
用户实体
\nnamespace App\\Entity;\n\nuse App\\Repository\\UsuarioRepository;\nuse Doctrine\\ORM\\Mapping as ORM;\nuse Symfony\\Component\\Security\\Core\\User\\UserInterface;\n\n/**\n * @ORM\\Entity(repositoryClass=UsuarioRepository::class)\n */\nclass Usuario\n{\n /**\n * @ORM\\Id\n * @ORM\\GeneratedValue\n * @ORM\\Column(type="integer")\n */\n private $id;\n\n /**\n * @ORM\\Column(type="string", length=255)\n */\n private $nombre;\n\n /**\n * @ORM\\Column(type="string", length=255)\n */\n private $apellidos;\n\n /**\n * @ORM\\Column(type="string", length=180, unique=true)\n */\n private $email;\n\n /**\n * @ORM\\Column(type="json")\n */\n private $roles = [];\n\n /**\n * @var string The hashed password\n …Run Code Online (Sandbox Code Playgroud)