gpt4 book ai didi

php - Symfony3授权流程

转载 作者:可可西里 更新时间:2023-11-01 01:14:54 25 4
gpt4 key购买 nike

我从symfony 3开始,我需要一些关于如何执行动态授权和身份验证过程的指导。
首先,身份验证部分主要完成了,我已经根据symfony docs的链接完成了:http://symfony.com/doc/current/security/entity_provider.html。我还没有理解的是如何实现接口函数getRoles()以便从数据库返回一个值(我有一个与用户表相关的表角色)。
其次,授权部分。我的应用程序将要求最终用户创建自己的访问机制,换句话说,我有一个用户创建角色的界面,然后定义该角色将能够访问哪些页面以及它将拥有哪些权限(创建、读取、更新、删除等)。然后,角色被赋予应用程序用户。
总之,这是相当标准的东西,所以symfony必须有一个干净的方式来做。到目前为止,我发现我必须使用acl,所以我按照文档中的方法:http://symfony.com/doc/current/security/acl.html
我诚实的问题是:现在怎么办?我应该采取哪些步骤来完全实现身份验证机制?为了持久化和检索访问规则,我现在应该做什么?如何将它们与用户角色关联起来?
注:这个问题可能与这里的其他问题有点类似,但事实上,这些问题对我也没有帮助,我在文档中的搜索也没有帮助。

最佳答案

所以,你的问题很广泛。不管怎样,这是个好问题,所以我要试着回答。
身份验证
这里没什么好说的,我只是希望您按照文章本身的建议使用fosuserbundle:这是在symfony中实现注册/登录系统的最佳方法,它将让您了解整个过程是如何工作的。如果你不是一个有经验的symfony开发人员,从头开始似乎不是最好的主意。
试试看!
授权过程
关于授权,您基本上有两个选项:使用FOSUserBundle和使用Voters
以我的经验,最好的选择是使用Voters
实际上,在大多数情况下,在用户和他有权使用的对象之间,您的实体中会有一个双向引用(参见Doctrine的ACL)。在这种情况下,acl不是必需的,甚至是不受欢迎的。
实际上,acl只不过是在两个对象(用例中的用户和文章)之间创建一个关系。为了管理这种关系,它在数据库中使用一个表,因此它必须查询它以获取关系并检查授权权限。
但是如果你已经在你的实体中直接有了用户和文章/组之间的双向引用,那么你就已经有了这种关系,所以你可以使用选民,而ACL的使用是多余的,甚至如所说的那样,因为它是无用的复制品而泄气。
如果你的实体中没有这种双向关系,那么就创建它:它在将来对其他事情肯定有用,而且,无论如何,你将有能力直接从实体树访问链接的实体!
此外,在您的场景中,您不能使用acl,因为您将对对象拥有自定义权限:投票者也是构建此类对象的最佳选择。
documentation about this
如何进行
我要做的第一件事是在interface中列出所有可用的特权:毕竟,它们与您的应用程序业务逻辑严格相关,因为用户不可能让某人做你的应用程序做不到的事情:如果你的应用程序没有实现编辑流,那么用户就不可能给某人编辑文章的能力。很明显。
所以,像这样的事情可能是好的:

interface PrivilegesEnum
{
const CREATE = 1;
const EDIT = 2;
const DELETE = 4;
const READ = 8;
const OTHER = 16;
// ... Other privileges
}

正如你所看到的,我给每个特权都提供了一个数值:这将给你使用位图的能力,它是一个非常强大的机制来管理这种事情:它允许你在数据库中只使用一个字段来列出所有的特权。
您可以在这里阅读更多关于口罩的信息:
Don't use ACL, but Voters instead
https://www.google.it/search?q=bitmask+php+example
How to implement a bitmask in php?
Why should I use bitwise/bitmask in PHP?
http://alanhollis.com/a-quick-guide-to-using-bitmasks-for-permissions-in-php/
https://codereview.stackexchange.com/questions/1509/php-bitmask-class
https://www.google.it/search?q=php+bitmask+theory
How to implement a bitmask in php?
http://php.net/manual/en/language.operators.bitwise.php
http://php.net/manual/it/language.operators.bitwise.php
https://code.tutsplus.com/articles/understanding-bitwise-operators--active-11301
我以前用过这个系统,这些是我收集到的一些有用的链接。他们可能会帮助你!
生成表单以列出权限
另一件你可能觉得有用的是 FormType列出你可用的特权:你可以写一个简单的 https://code.tutsplus.com/articles/number-systems-an-introduction-to-binary-hexadecimal-and-more--active-10848
如何管理角色
要管理角色,请阅读 custom FormTypehow Roles are managed by the Security ComponentFOSUserBundle
用户与群、文章的关系
一旦你达到这一点,你应该有更多的实体,阅读更多关于条令关系机制的知识,你应该能够把你的用户与他们的角色,他们的小组和文章联系起来。
无论如何,您将拥有所有必要的概念和实用工具,以便更好地思考您的具体实现。
期末笔记
正如您所看到的,实现这样的类型授权过程不是那么简单。
如果你真的需要在开发应用程序的这个阶段,我建议你仔细考虑,因为如果你可以推迟它,那么我建议你去做。
如果你想尽快上线,实现这个系统需要很多时间来学习、实现、调试和重构代码(我指的是几周,而不是几天!).
所以,如果你有这么多时间,那么,去实现这个系统。但如果你觉得你没有一直这样做,那就用一个更“静态”的系统,上网,然后让它更“动态”。
毕竟,这是 on Stackoverflow
祝你好运!

关于php - Symfony3授权流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41559586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com