2021-03-08(Mon)
Last updated
Last updated
eunhkim๋๊ณผ ํจ๊ป admin ๋ชจ๋์ ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ์ฑํฌ๋ฅผ ๋ง์ถ๋ ์์ ์ ํ์๋ค.
์ฑํ ๋ฃธ์ ์ ์ ๊ถํ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ์ ๋์์ ๋ํด์ ๊ฒฝ์ฐ์ ์๊ฐ ๋ง๋ค๋ณด๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ์์๋์๋ค. ์ดํ ์๋ PR ๋ด์ฉ์ ํด๋นํ๋ ์์ ์ ๋ง์ณค๋ค.
Admin ํ์ด์ง๋ฅผ ๊ตฌํํ์ต๋๋ค.
user ํ
์ด๋ธ์ position ์ปฌ๋ผ ๊ฐ์ด web_owner
์ด๊ฑฐ๋ web_admin
์ธ ๊ฒฝ์ฐ 'service_manage'๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ๊ฐ์ฃผํ๊ธฐ๋ก ํ์ต๋๋ค.
'service_manage'๊ฐ ๊ฐ๋ฅํ ์ ์ ๋ ์ฐ์ธก ํ๋จ์ admin
๋ฒํผ์ด ํ์๋๊ณ , ์ด ๋ฒํผ์ ๋๋ฌ Admin ํ์ด์ง๋ก ์ง์
ํ ์ ์์ต๋๋ค.
api/admin/db
๋ผ์ฐํฐ URL์ ์ถ๊ฐํ์ต๋๋ค. ์ด URL๋ก GET ์์ฒญ์ ๋ ๋ฆฌ๋ฉด Admin index ํ์ด์ง ๋ ๋๋ง์ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์๋ต๋ฉ๋๋ค. ๊ตณ์ด ๋ผ์ฐํฐ URL์ ์ถ๊ฐํ ์ด์ ๋ 1) ๊ฐ ์์๋ณ๋ก ์์ฒญ์ ๋ ๋ฆฌ๋ ๊ฒ์ด ๋ฒ๊ฑฐ๋กญ๊ณ , 2) admin ํ์ด์ง๋ ํน์ํ๊ฒ ์ฒ๋ฆฌํด๋ ๋ฌด๋ฐฉํ๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์กฐ์ํ๊ณ ์ ํ๋ ์์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด action๊ณผ resource, membership, position์ด ๊ฐ ์์์ ์ฑ๊ฒฉ์ ๋ง๊ฒ ์
ํ
๋ฉ๋๋ค. ๋๋ถ์ ํ๋์ UI๋ก ์ฌ๋ฌ ์์์ ์ปจํธ๋กค ํ ์ ์์ต๋๋ค. ์ํผ์งฑ ์์ ๊ตฟ๊ตฟ ์์ด๋์ด์
๋๋ค!
์ ์
์ ์ ๊ถํ ๋ณ๊ฒฝํ๊ธฐ
์ ์ ์ ๊ถํ์ web_admin, user๋ก ๋ณ๊ฒฝ๊ฐ๋ฅํฉ๋๋ค.
์ ์ ์ ์ ๊ธ์งํ๊ธฐ
ํน์ ์ ์ ๊ฐ ์ ์ํ์ง ๋ชปํ๋๋ก ๋ง๊ณ , ๋ก๊ทธ์์์ํต๋๋ค(ban)
์๋ธ์ ํธ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ, ban ๋นํ ์ ์ ๋ฅผ ์ฑ๋ฃธ, ๊ธธ๋ ๋ฑ์์ ๋๊ฐ๊ฑฐ๋ ํํดํ๋ ๋์์ ๊ตฌํํ์ง ์์์ต๋๋ค.
์ฑํ ์ฑ๋
๊ทธ๋ฃน ์ฑ ๋ํ๋ด์ญ ๋ณด๊ธฐ
๋ ๋๋งํ ๋ํ๊ฐ ์์ผ๋ฉด ๋ ๋๋งํ ๋ํ๊ฐ ์๋ค๊ณ ํ์๋ฉ๋๋ค.
๊ทธ๋ฃน ์ฑ ์ฑ๋ ์ญ์ ํ๊ธฐ
ํด๋น ์ฑ๋ฃธ์ ์ฐธ์ฌํ๊ณ ์๋ ๋ชจ๋ ์ ์ ๋ฅผ ๋ด๋ณด๋ธ ํ ์ฑ๋ฃธ์ ์ญ์ ํฉ๋๋ค.
์ฑํ ๋ฉค๋ฒ์ญ
๊ทธ๋ฃน ์ฑ ๋ฉค๋ฒ์ญ ๋ณ๊ฒฝํ๊ธฐ
๊ทธ๋ฃน ์ฑ ๋ฉค๋ฒ์ญ์ position์ ๋ณ๊ฒฝํฉ๋๋ค.
์ฑ๋ฃธ์๋ ๋ฐ๋์ 1๋ช ์ owner๊ฐ ์กด์ฌํด์ผํ๊ธฐ ๋๋ฌธ์ ์๋ ์์ธ์ฒ๋ฆฌ๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
๋ง์ฝ ํน์ ์ ์ ๋ฅผ owner๋ก ์๋ช ํ๋ค๋ฉด, ๊ธฐ์กด์ owner๋ฅผ ์ฑ๋ฃธ์์ ๋ด๋ณด๋ด๋ฉฐ ๋์์ member๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ด๋ owner์๋ ์ ์ ๊ฐ ์ฌ์ ํ owner์๊ฒ ํ์ฉ๋ ๋ฉ๋ด ๋ฑ์ ์กฐ์ํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํจ์ ๋๋ค.
๋ง์ฝ owner์๋ ์ ์ ๋ฅผ ๋ค๋ฅธ position์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด, ๋ ๋ค๋ฅธ ์ ์ ๊ฐ owner๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด ๋ owner์๋ ์ ์ ๊ฐ 1๋ช ์ด์๋ค๋ฉด, ๋ค๋ฅธ position์ผ๋ก ๋ณ๊ฒฝ์ด ๋ถ๊ฐํ๋ค๊ณ ์๋ด๋ฉ๋๋ค.
๊ทธ๋ฃน ์ฑ ๋ฉค๋ฒ ์ ๋ช ํ๊ธฐ
owner๋ฅผ ์ ๋ช ํ ๊ฒฝ์ฐ ๋ค๋ฅธ ์ ์ ๋ฅผ owner๋ก ์๋ช ํ๊ณ ์ ๋ช ํฉ๋๋ค.
๋ง์ฝ ์ฑ๋ฃธ์ 1๋ช ๋จ์ ๋ฉค๋ฒ๋ฅผ ์ ๋ช ํ ์ํฉ์ด์๋ค๋ฉด, ํด๋น ์ ์ ๋ฅผ ๋ด๋ณด๋ด๊ณ ์ฑ๋ฃธ์ด ์ญ์ ๋ฉ๋๋ค.
๊ธธ๋ ๋ฉค๋ฒ์ญ
๊ธธ๋ ๋ฉค๋ฒ์ญ ๋ณ๊ฒฝํ๊ธฐ
์ฑ๋ฃธ์ owner์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธธ๋์ master๋ ๋ฐ๋์ 1๋ช ์กด์ฌํด์ผํ๋ฏ๋ก, ์ฑ๋ฃธ์์ ๋ด๋ณด๋ด๋ ๋์๋ง ํ์ง ์์ ๋ฟ ๋๋ถ๋ถ ๋น์ทํ๊ฒ ์์ธ์ฒ๋ฆฌ๋์์ต๋๋ค.
๊ธธ๋ ๋ฉค๋ฒ ์ ๋ช ํ๊ธฐ
์ฑ๋ฃธ์ owner์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ธธ๋์ master๋ ๋ฐ๋์ 1๋ช ์กด์ฌํด์ผํ๋ฏ๋ก, ์ฑ๋ฃธ์์ ๋ด๋ณด๋ด๋ ๋์๋ง ํ์ง ์์ ๋ฟ ๋๋ถ๋ถ ๋น์ทํ๊ฒ ์์ธ์ฒ๋ฆฌ๋์์ต๋๋ค.
ํ ๋๋จผํธ ํ ๋๋จผํธ ์์ฑ ํ์ด์ง๋ก ์ฐ๊ฒฐ๋ฉ๋๋ค.
admin ์ปจํธ๋กค๋ฌ์๋ admin์ด ์๋ ์ ์ ๊ฐ ์์ฒญ ๋ ๋ฆฌ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด current_user_is_admin_or_owner?
์ผ๋ก ๊ถํ๊ฒ์ฌ๋ฅผ ํฉ๋๋ค. ์ด ๋ ์์ฒญ์ HTTP_ADMIN
ํค๋๋ฅผ ๊ฒ์ฌ์ ํ์ฉํฉ๋๋ค.
๋ฑํ ์์ต๋๋ค.
๊ทธ๋ฃน ์ฑ๊ณผ ๊ธธ๋ ๋ฉค๋ฒ์ญ ๊ด๋ จํด์ ์ฐ๊ด ๊ฐ์ฒด destroy ๊ด๋ จ ์ฒ๋ฆฌ๋ฅผ ํ๋๊ฒ ์๋นํ ๋ฒ๊ฑฐ๋ก์ ๋ค. ๊ถํ ๋ณ๊ฒฝ์ด ํ๋ก ํธ์๋์ ์ค์๊ฐ์ผ๋ก ๋ฐ์๋๋๋ก ๊ตฌํํ๋ ค๋ค๋ณด๋ ๋์ด๋๊ฐ ์ข ๋ ์ฌ๋ผ๊ฐ ๋๋! ํนํ '์ฑ๋ฃธ, ๊ธธ๋์ owner๋ ํ๋๋ง ์์ด์ผํ๋ค'๋ ์ ์ฝํ์ ์ฑ๋ฃธ์ ํฌํจ๋์ด์๋ ์ ์ ๋ค์ owner๋ก ์๋ช
ํ๊ฑฐ๋ ์ฑ๋ฃธ์์ kickํ๋ ๋์ ๊ตฌํ์ ์์ธ์ฒ๋ฆฌ๊ฐ ๊น๋ค๋ก์ ๋ค. ActionCable
๊ฐ์ ์น์์ผ ๊ด๋ จ๋ ๋ฉ์๋๋ค์ ์ด๋ป๊ฒ ํ
์คํธ๋ฅผ ์์ฑํด์ผํ๋ ๊ฑธ๊น.. ๊ฐ ๊ธธ์ด ๋ฉ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ๋ฃธ์ web_owner, web_admin ๊ฐ์ 'super' ๊ถํ์ ๊ฐ์ง ์ ์ ๋ค์ ์ถ๊ฐํ๋ ๊ณผ์ ์์ ๋ฆฌํฉํ ๋ง์ ๋ง์ด ์งํํ๋ค. ์ ์ ๊ถํ ๊ด๋ จํ์ฌ cancancan
๊ฐ์ gem์ด ์ ๋ฐ๋ก ์๋์ง ์ฒด๊ฐํ ์ ์์๋ค.
๋ฐฑ์๋ ๋ฆฌํฉํ ๋ง, docker-compose up
์ปค๋งจ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์๋๊ฐ๋ฅํ ์ํ ๋ง๋ค๊ธฐ
ํญ๋ชฉ
๋ด์ฉ
ํ์ต ๋ ์ง
2021-03-08(์)
ํ์ต ์๊ฐ
11:00~24:00
ํ์ต ๋ฒ์ ๋ฐ ์ฃผ์
Admin ๋ชจ๋
ํ์ต ๋ชฉํ
Admin PR ๋ฆฌ๋ทฐ์ ๋์ํ๋ค.
๋๋ฃ ํ์ต ๋ฐฉ๋ฒ
eunhkim๋๊ณผ ํ์ด์ฝ๋ฉ ์งํ