refact-be/odoo-bundle

此包最新版本(0.1.0)没有提供许可信息。

Symfony Bundle,用于将Odoo用作认证提供者

0.1.0 2019-07-13 20:18 UTC

This package is auto-updated.

Last update: 2024-09-14 08:05:22 UTC


README

此Symfony bundle附带了两种认证机制,您可以使用它们从Odoo实例中认证用户

安装

composer require refact-be/odoo-bundle

将bundle添加到bundles.php

Refact\OdooBundle\OdooBundle::class => ['all' => true]

为Odoo bundle创建一个配置文件(config/packages/odoo.yaml)

odoo:
    url: https://:8069
    database: database_name
    admin_id: 2
    admin_pass: admin
    
    # required only for the sso mechanism
    sso_secret: supersecret

    #role_mapping:
    #    1: ROLE_USER_TYPES_INTERNAL_USER
    #    9: ROLE_USER_TYPES_PORTAL

role_mapping配置是可选的,但允许Odoo组和Symfony角色进行深度集成

使用odoo:get-roles命令自动导出role_mapping

bin/console odoo:get-roles

从Odoo读取数据

/**
 * @Route("/me", name="me_details")
 * @IsGranted("ROLE_USER_TYPES_PORTAL")
 */
public function users(Odoo $odoo, TokenStorageInterface $tokenStorage)
{
    $token = $tokenStorage->getToken();

    dump($token);

    dd($odoo->rpc('object', 'execute_kw', ['res.users', 'search_read', [[['login', '=', $token->getUser()]]]])[0]);
}

Odoo表单登录

此表单扩展了传统的Symfony表单登录,允许重用其大多数选项

config/packages/security.yaml

security:
    firewalls:
        main:
            anonymous: true

            form_login_odoo:
                #login_path: login

            logout:
                path: logout

    role_hierarchy:
        # allow internal users to access pages restricted to portal users
        ROLE_USER_TYPES_INTERNAL_USER: ROLE_USER_TYPES_PORTAL

控制器

/**
 * @Route("/login", name="login")
 * @Route("/login_check", name="login_check")
 * @Route("/logout", name="logout")
 */
public function login(AuthenticationUtils $authenticationUtils)
{
    return $this->render('app/login.html.twig', [
        'username' => $authenticationUtils->getLastUsername(),
        'error' => $authenticationUtils->getLastAuthenticationError(),
    ]);
}

模板/app/login.html.twig

{% if error %}
    <p><strong>{{ error.messageKey }}</strong></p>
{% endif %}

<form method="post" action="{{ path('login_check') }}">
    <input type="text" name="_username" value="{{ username }}">
    <input type="password" name="_password">
    <button>Log in</button>
</form>

Odoo单点登录(SSO)

如果用户已经在Odoo中登录,那么在Symfony应用程序中重复凭据可能会给用户带来不良体验。SSO允许连接两个应用程序以共享认证信息。

此机制需要安装和配置Odoo实例中的SSO插件。有关详细信息,请参阅https://github.com/refact-be/odoo-sso-addon

config/packages/security.yaml

security:
    firewalls:
        main:
            anonymous: true

            sso_odoo:

            logout:
                path: logout

config/routes.yaml

login:
    path: /login
login_check:
    path: /login_check
logout:
    path: /logout