<aside>
</aside>
μλ νμΈμ! λλμ΄ 6λΆ 'μΈμ¦ λ° λ³΄μ'μ λ§μ§λ§ μκ°, 31κ°μ λλ€! π₯³π
μ§λ 30κ°μμλ JWT ν ν°μ κ²μ¦νκ³ get_current_user
μμ‘΄μ±μ λ§λ€μ΄, μ°λ¦¬ /tasks
API μλν¬μΈνΈλ€μ μΈμ¦λ μ¬μ©μλ§ μ κ·Όν μ μλλ‘ λ³΄νΈνμ΅λλ€. μ΄μ μ°λ¦¬ APIλ μμ²μ λ³΄λΈ μ¬μ©μκ° λꡬμΈμ§(μΈμ¦) νμ€ν μ μ μκ² λμμ΄μ!
νμ§λ§ μ¬μ©μκ° λꡬμΈμ§ μλ κ²λ§μΌλ‘λ μΆ©λΆνμ§ μμ λκ° λ§μ΅λλ€. μλ₯Ό λ€μ΄, 'A' μ¬μ©μκ° 'B' μ¬μ©μκ° μμ±ν ν μΌμ λ§μλλ‘ μμ νκ±°λ μμ ν μ μλ€λ©΄ λ¬Έμ κ° λκ² μ£ ? λλ 'κ΄λ¦¬μ'λ§ μ κ·Όν΄μΌ νλ νΉλ³ν κΈ°λ₯μ΄ μμ μλ μμ΅λλ€. μ΄λ κ² μΈμ¦λ μ¬μ©μκ° **무μμ ν μ μλμ§(κΆν)**λ₯Ό μ μ΄νλ κ²μ **μΈκ°(Authorization)**λΌκ³ ν©λλ€.
μ΄λ² μκ°μλ λ°λ‘ μ΄ **μΈκ°(Authorization)**μ κΈ°μ΄λ₯Ό ꡬνν΄ λ΄ λλ€. κ°μ₯ νν λ κ°μ§ ν¨ν΄μΈ μμ κΆ(Ownership) κΈ°λ° μ κ·Ό μ μ΄ (λ΄ ν μΌμ λλ§!)μ μν κΈ°λ° μ κ·Ό μ μ΄(RBAC) μ μμ£Ό κ°λ¨ν νν (κ΄λ¦¬μ ꡬλΆ)λ₯Ό μ°λ¦¬ ToDo APIμ μ μ©ν΄ λ³΄κ² μ΅λλ€. APIμ 보μμ λμ± κ°ννκ³ μ¬μ©μμ λ°μ΄ν°λ₯Ό μμ νκ² μ§ν€λ λ°©λ²μ λ°°μλ΄ μλ€! π§
μ΄λ² 31κ°μμλ 30κ°μμ ꡬνν μ¬μ©μ μΈμ¦(Authentication)μ λ°νμΌλ‘, μΈκ°(Authorization), μ¦ μ κ·Ό μ μ΄ κΈ°λ₯μ ꡬννλ κΈ°λ³Έμ μΈ λ°©λ²μ λ°°μλλ€. μΈμ¦μ΄ 'λꡬμΈκ°?'λ₯Ό νμΈνλ κ²μ΄λΌλ©΄, μΈκ°λ '무μμ ν μ μλκ°?'λ₯Ό κ²°μ νλ κ³Όμ μ λλ€.
λ¨Όμ , κ°μ₯ μΌλ°μ μΈ μΈκ° ν¨ν΄ μ€ νλμΈ μμ κΆ(Ownership) κΈ°λ° μ κ·Ό μ μ΄λ₯Ό ꡬνν©λλ€. μ¬μ©μκ° μμ μ ν μΌ(Task) λ°μ΄ν°λ§ μ‘°ν, μμ , μμ ν μ μλλ‘ tasks
λΌμ°ν°μ κ΄λ ¨ μλν¬μΈνΈ λ‘μ§μ μμ ν©λλ€. λ°μ΄ν°λ² μ΄μ€ 쿼리 μ νμ¬ λ‘κ·ΈμΈλ μ¬μ©μμ ID(current_user.id
)μ Taskμ μμ μ ID(owner_id
)λ₯Ό λΉκ΅νλ 쑰건μ μΆκ°νμ¬ μ΄λ₯Ό ꡬνν©λλ€.
λ€μμΌλ‘, **μν κΈ°λ° μ κ·Ό μ μ΄(Role-Based Access Control, RBAC)**μ μμ£Ό κΈ°μ΄μ μΈ ννλ₯Ό ꡬνν΄ λ΄
λλ€. User
SQLAlchemy λͺ¨λΈμ is_admin
κ³Ό κ°μ λΆλ¦¬μΈ(boolean) νλλ₯Ό μΆκ°νκ³ , μ΄ μ€ν€λ§ λ³κ²½ μ¬νμ Alembic λ§μ΄κ·Έλ μ΄μ
μ ν΅ν΄ λ°μ΄ν°λ² μ΄μ€μ λ°μν©λλ€. κ·Έλ¦¬κ³ μ΄ is_admin
νλκ·Έλ₯Ό νμΈνμ¬ κ΄λ¦¬μ κΆνμ μꡬνλ κ°λ¨ν **μμ‘΄μ± ν¨μ(require_admin
)**λ₯Ό λ§λ€κ³ , μ΄λ₯Ό μ¬μ©νμ¬ κ΄λ¦¬μ μ μ© API μλν¬μΈνΈλ₯Ό 보νΈνλ μμ λ₯Ό ꡬνν©λλ€.
λ§μ§λ§μΌλ‘, μΈμ¦ μ€ν¨ μ λ°νλλ 401 Unauthorized μ μΈκ° μ€ν¨ μ λ°νλλ 403 Forbidden μν μ½λμ μλ―Έ μ°¨μ΄λ₯Ό λͺ νν μ 리ν©λλ€.
μ΄ κ°μλ₯Ό λ§μΉλ©΄ μ¬λ¬λΆμ λ€μμ ν μ μκ² λ©λλ€:
is_admin
)λ₯Ό μΆκ°νκ³ AlembicμΌλ‘ μ€ν€λ§ λ³κ²½μ κ΄λ¦¬ν μ μμ΅λλ€.