我已经创建了一个REST API,我实际上是尝试使用FOSOAuthServerBundle来保护它。
我创建了路由newclient
以生成新客户端,现在我只想允许“管理员”#39;访问此网址。
我想我可以用scopes
做到这一点,但我无法弄明白。
这是我的security.yml:
security:
providers:
user_provider:
id: user_provider
firewalls:
doc:
pattern: ^/doc
security: false
oauth_token:
pattern: ^/oauth/v2/token
security: false
oauth_authorize:
pattern: ^/oauth/v2/auth
provider: user_provider
anonymous: true
api:
pattern: ^/
fos_oauth: true
stateless: true
anonymous: false
access_control:
- { path: ^/, roles: ROLE_CLIENT }
- { path: ^/newclient, roles: ROLE_ADMIN }
我的config.yml
fos_oauth_server:
db_driver: orm
client_class: WS\RESTBundle\Entity\Client
access_token_class: WS\RESTBundle\Entity\AccessToken
refresh_token_class: WS\RESTBundle\Entity\RefreshToken
auth_code_class: WS\RESTBundle\Entity\AuthCode
任何提示?
答案 0 :(得分:0)
实际上使用范围进行desling并不是最好的方法,而且捆绑包不支持它:https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/issues/231
我使用了User模型,添加了一个“角色”方法,并检查当前用户的角色是否足以访问路由。
这是一段代码
//Get the current user, check if it's an admin
$token = $this->container->get('security.context')->getToken()->getToken();
$accessToken = $this->container
->get('fos_oauth_server.access_token_manager.default')
->findTokenBy(array('token' => $token));
$client = $accessToken->getClient();
if ($client->getRole() == 'admin') {
...
}
不确定这是否是最佳方式,欢迎任何建议!