是symfony的新手,需要处理ACL部分 我需要在我的项目中构建ACl,可以在下表中解释
Users/Access User_List_View User_Create User_Edit User_Delete User_Status Edit_ownDetails
Super Admin Yes Yes Yes Yes Yes Yes
Admin Yes No Yes No Yes Yes
Client No No No No No Yes
角色分配
User Role
User-A Super Admin
User-B Admin
User-C Client
User-D Client
我检查了下面的许多链接
http://symfony-gu.ru/documentation/en/html/cookbook/security/acl.html
https://github.com/Problematic/ProblematicAclManagerBundle
https://www.adayinthelifeof.nl/2012/07/04/symfony2-implementing-acl-rules-in-your-data-fixtures/
http://knpuniversity.com/screencast/question-answer-day/symfony2-users-menu-cms
https://knpuniversity.com/screencast/symfony-voters
http://kriswallsmith.net/page/4
http://problematic.io/2012/03/10/symfony2-bundles-i-cant-live-without/
我发现最受欢迎的是FOSUserbundle,但是我需要用角色手动编写,同样我也检查了选民,这也是一个很好但我的客户的要求是他甚至应该能够为每个用户创建自定义权限。所以我需要实现类似于表结构的ACL,这对他来说很容易在个人层面进行修改。
为了创建示例,我试图实现http://symfony.com/doc/current/cookbook/security/acl.html,但是从链接中我并没有清楚地知道在哪里为用户添加角色以及如何检查网格中的角色和访问权限。该文件似乎很难理解实施。
如果有人以某种方式或使用任何第三方库实现了这一点吗?
即使我已经在stackoverflow中检查了以下链接,但没有我可以使用的响应
Symfony Acl implementation
How to make advanced ACL in Symfony2?
Check if a role is granted for a specific user in Symfony2 ACL
https://stackoverflow.com/questions/6915502/symfony2-acl-roles-and-users
答案 0 :(得分:0)
以下解决方案对我有用。
在继续之前,您必须按照http://symfony.com/doc/current/cookbook/security/acl.html
中给出的步骤进行操作在用户表中,将列添加为角色,如问题
中的“角色分配”下所指定在位于src / AppBundle / Entity / User.php的User.php文件中添加get和set方法
/**
* Set roles
*
* @param boolean $roles
*
* @return User
*/
public function setRoles($roles)
{
$this->roles = $roles;
return $this;
}
/**
* Get roles
*
* @return boolean
*/
public function getRoles()
{
return array($this->roles);
}
现在检查上面的getRoles()我已经返回一个数组,因为symfony还提供了一个用户可以拥有多个角色的条款,所以要么在数据库的角色字段中指定一个数组,要么指定一个角色,而不仅仅是从user.php文件中返回一个数组
请注意每个角色前缀为' ROLE _'比如ROLE_ADMIN,ROLE_USER等。
通过上述内容,我们为每个用户指定了ROLE。
现在在你的security.yml中 指定访问控制
security:
encoders:
AppBundle\Entity\User:
algorithm: bcrypt
acl:
connection: default
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
our_db_provider:
entity:
class: AppBundle:User
property: username
# if you're using multiple entity managers
# manager_name: customer
in_memory:
memory: ~
firewalls:
default:
pattern: ^/
http_basic: ~
provider: our_db_provider
anonymous: ~
#http_basic: ~
form_login:
login_path: /login
check_path: /login_check
access_control:
# require ROLE_ADMIN for /admin*
- { path: ^/admin, roles: ROLE_ADMIN }