iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
Modern Web

PHP框架-Symfony4 + api platform 系列 第 19

Day#19 哪扇API的門用哪把鑰匙開 - 權限

權限,我們可以看作通往各扇門的鑰匙,而我們的各扇門指的就是各支API囉!


權限控管這部分是真的很重要,
假設我今天PUT沒有設定權限,遇到有心人士亂送request,我後台不就爆炸了...
雖然說還是有可以破解的方法啦..不然為什麼會存在駭客這種令小菜鳥敬佩的職業呢?
應該算職業吧XD..

即便防不勝防,但該防的還是要防,是吧!!?

這邊就不說明如何賦予一個帳號權限(ROLE)了 ,
因為這可能會是一大篇獨立教學,包含帳號註冊,登入,驗證....等等的

下次有機會再來開一篇獨立文章來講講API TEST 和 帳號驗證的部分吧~


假設,今天我想限定我的API不是公開的,也就是存在於我系統且擁有某個權限的帳號才可以看到的,
我們可以在目錄config底下的子目錄packages的security.yaml裡設定 ,
這名字一聽就是拿來設定關於安全性的東西~

設定檔裡長這樣,上面的東西,什麼登入要驗證哪個實體類的哪個欄位阿...
先不管它,我們要看的是那個 access_control 這邊就是設定權限的地方 ,
path是路徑 , ^ 這個符號代表前面的domain ,
我是習慣講前綴..但應該沒人聽得懂我在講什麼...後面則是URI ,
roles就是設定哪個權限才能進入這個路徑

通常,如果我們使用的是一般Api Resource 裡的那幾種http method ,
我們不會特別進設定檔一個一個給權限,除非是客製化api 或是 一般的ROUTE 才會進設定檔給權限,
因為 Api Resource加權限的方法,方便多了!!

上一篇說到的地雷,在本機開發的時候沒有遇到,小菜鳥開發的作業系統是windows,
結果殊不知程式上正式機的時候,遇到了一個api platform跟 IIS 之間的詭異問題 , 這問題不解決又不行,

問題是什麼呢? 就是...因為我們使用api platform 在response的時候會給予一個設定location,
也就是網址的位置, IIS會將這個location當成是要轉址 ,
導致它會在我們回傳的json格式上多加一串location的html ,破壞掉原先的json格式,
接著想當然,如果前端有驗證的話就會被擋掉啦~

但上述情形,小菜鳥只有在post時候碰到過,一直把我原先的201回應碼變成302... ,
然後小菜鳥就突發奇想,但也不知道這是不是一個好的解決方式 , 就是 既然 200 201都是成功的回應碼,
那我就把201改成200就好啦,也不會有以上問題了,所以我就真的把POST回應碼改成200了XD ~

如果有更好更精確的解決方法,也請各位大大們告訴小菜鳥了(´ΘωΘ`)

以上講完權限設定,下一篇該是時候來把api platform做一個結束了~
第20篇以後,希望用開發實例來說明,畢竟....一直聽理論也會覺得頭痛吧。・゚・(つд`゚)・゚・


上一篇
Day#18 自己產出一個Get API - Customize Get API
下一篇
Day#20 API platform的開關及format設定
系列文
PHP框架-Symfony4 + api platform 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言