Cara menggunakan ungkapan dalam keselamatan, penghalaan, perkhidmatan dan pengesahan


Symfony datang dengan bahasa ekspresi yang berkuasa #🎜🎜🎜##🎜 komponen Ia membolehkan anda menambah logik tersuai lanjutan pada konfigurasi anda. Rangka kerja Symfony menggunakan ungkapan yang baik dalam: ###### 🎜🎜 ## 🎜🎜 ## ## 🎜🎜 ## ## 🎜🎜 #Perkhidmatan konfigurasi#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#; 🎜#Keadaan padan laluan

#🎜🎜 #

; di bawah) dan

    Gunakan allow_if untuk kawalan akses
  • # ###### 🎜🎜#;#🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜# 🎜🎜##🎜##🎜🎜🎜🎜🎜🎜 Create³³Untuk mendapatkan maklumat lanjut tentang penggunaan klausa adverba: ungkapan, sila rujuk #🎜🎜🎜🎜 🎜🎜#Sintaks ungkapan
  • #🎜🎜🎜 Security: Gunakan ungkapan kompleks untuk kawalan akses #🎜🎜🎜🎜 .
  • Selain peranan ini,
  • diberikan juga . TerimaExpressionObjek:
    use Symfony\Component\ExpressionLanguage\Expression;// ... public function indexAction(){
        $this->denyAccessUnlessGranted(new Expression(
            '"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())'
        ));     // ...}

    Dalam contoh ini, jika pengguna semasa mempunyai ROLE_ADMINROLE_ADMIN或者当前的用户对象的isSuperAdmin()方法返回true那么访问将被授权(注意:你的用户对象未必拥有isSuperAdmin方法,这个方法只为此例出现)。

    这就用到了一个表达式,你还可以学习更多关于表达languange的语法,参考表达式语法

    在表达式中,你可以访问以各种变量:

    • user
    • 用户对象(或者是anon,如果未经认证的话)。
    • roles
    • 用户所拥有的角色数组,包括角色层级(角色层级)但是不包括IS_AUTHENTICATED_*属性(参考下面的功能)。
    • object
    • 第二作为个参数传到isGranted方法的对象(如果有的话)。
    • token
    • 令牌对象。
    • trust_resolver
    • AuthenticationTrustResolverInterface接口,其对象是:可能你希望使用下面的is_* atau objek pengguna semasa isSuperAdmin()
    • kaedah mengembalikan

    truemaka akses akan dibenarkan (nota: objek pengguna anda mungkin tidak mempunyai isSuperAdmin

    🎜 kaedah, kaedah ini hanya muncul untuk contoh ini). 🎜🎜
    🎜🎜🎜🎜Ini menggunakan ungkapan Anda juga boleh mengetahui lebih lanjut tentang sintaks menyatakan bahasa, rujuk 🎜🎜🎜🎜sintaks ungkapan🎜🎜🎜🎜. 🎜🎜🎜🎜🎜🎜Dalam ungkapan, anda boleh mengakses pelbagai pembolehubah: 🎜🎜🎜
    • pengguna🎜
    • 🎜🎜Objek pengguna (atau 🎜🎜anon🎜🎜 jika tidak disahkan). 🎜🎜🎜
    • peranan🎜
    • 🎜🎜Susunan peranan yang dimiliki oleh pengguna, termasuk 🎜🎜🎜🎜Tahap peranan🎜🎜🎜🎜 (peringkat peranan) tetapi tidak termasuk atribut 🎜🎜IS_AUTHENTICATED_*🎜🎜 (rujuk fungsi di bawah ). 🎜🎜🎜
    • objek🎜
    • 🎜🎜Parameter kedua diserahkan kepada kaedah 🎜🎜isGranted🎜🎜 objek (jika ada). 🎜🎜🎜
    • token🎜
    • 🎜🎜Token objek. 🎜🎜🎜
    • trust_resolver🎜
    • AuthenticationTrustrusTraverInterface Sebaliknya, < code class="notranslate">is_*🎜🎜. 🎜🎜🎜🎜🎜🎜🎜 Selain itu, anda boleh mengakses pelbagai fungsi dalam ungkapan: 🎜🎜🎜
      • is_authenticated
      • is_authenticated
      • 返回true,如果用户通过“记住我”或“完全”身份认证通过的话 - 比如,如果用户已登录,就返回true。
      • is_anonymous
      • 于等同在isGranted函数中使用IS_AUTHENTICATED_ANONYMOUSLY
      • is_remember_me
      • 类似但不完全等同于IS_AUTHENTICATED_REMEMBERED,见下文。
      • is_fully_authenticated
      • 类似但不完全等同于IS_AUTHENTICATED_FULLY,见下文。
      • has_role
      • 查看一个用户是否拥有给定的ROLE  - 等同于一个这样的表达式'ROLE_ADMIN' in roles

      is_remember_me不同于检查

      IS_AUTHENTICATED_REMEMBERED

      is_remember_me状语从句:is_authenticated_fully函数与在isGranted函数中使用IS_AUTHENTICATED_REMEMBERED状语从句:IS_AUTHENTICATED_FULLYReturn true, jika pengguna melepasi pengesahan "ingat saya" atau "penuh" - contohnya, jika pengguna log masuk, mengembalikan benar.

    • adalah_tanpa nama bersamaan dengan #🎜 🎜#isGranted

      digunakan dalam fungsi #🎜🎜##🎜🎜#IS_AUTHENTICATED_ANONYMOUSLY kod >#🎜🎜##🎜🎜#. #🎜🎜##🎜🎜##🎜🎜#is_remember_me#🎜🎜##🎜🎜##🎜🎜#Serupa tetapi tidak betul-betul sama Dalam #🎜🎜##🎜🎜#IS_AUTHENTICATED_REMEMBERED#🎜🎜##🎜🎜#, lihat di bawah. #🎜🎜##🎜🎜##🎜🎜#is_fully_authenticated#🎜🎜##🎜🎜##🎜🎜#Serupa tetapi tidak betul-betul sama Dalam #🎜🎜##🎜🎜#ADALAH_DISAHKAN_SEPENUHNYA#🎜🎜##🎜🎜#, lihat di bawah. #🎜🎜##🎜🎜##🎜🎜#mempunyai_peranan#🎜🎜##🎜🎜##🎜🎜# Semak sama ada pengguna mempunyai PERANAN yang diberikan - bersamaan dengan ungkapan seperti #🎜🎜##🎜🎜#'ROLE_ADMIN' dalam peranan#🎜🎜##🎜🎜#. #🎜🎜##🎜🎜#

    #🎜🎜 ##🎜🎜#is_remember_me berbeza daripada menyemak #🎜🎜##🎜🎜#

    #🎜🎜##🎜🎜#IS_ATHENTICATED_REMEMBERED#🎜🎜##🎜<🎜##🎜 / em>

    ialah_ingat_saya#🎜🎜##🎜🎜#Klausa adverba: #🎜🎜##🎜🎜#adalah_disahkan_sepenuhnya#🎜🎜## 🎜 🎜# Fungsi dan penggunaan dalam #🎜🎜##🎜🎜#diberikan#🎜🎜##🎜🎜# fungsi 🎜##🎜🎜#Klausa Adverba: #🎜#<🎜##🎜 kod>DISAHKAN_SEPENUHNYA#🎜🎜##🎜🎜# adalah serupa dalam bahasa Inggeris - mereka bukan #🎜🎜##🎜🎜## 🎜🎜##🎜🎜##🎜🎜#not#🎜🎜 🎜##🎜🎜##🎜🎜##🎜🎜#Sama Contoh berikut menunjukkan perbezaan: 🎜#.

    use Symfony\Component\ExpressionLanguage\Expression;// ... $ac = $this->get('security.authorization_checker');$access1 = $ac->isGranted('IS_AUTHENTICATED_REMEMBERED'); $access2 = $ac->isGranted(new Expression(
        'is_remember_me() or is_fully_authenticated()'));

    Di sini, nilai $akses1$access1$access2的值是相同的。不同于IS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_FULLY的行为,is_remember_me函数仅当用户通过了remember_me cookie认证时返回true,同时is_fully_authenticated dan $akses2 adalah sama. Berbeza dengan tingkah laku IS_AUTHENTICATED_REMEMBERED dan
    IS_AUTHENTICATED_FULLY

    ,
is_remember_me