์๋ ํ์ธ์, ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด๋ ค๊ณ ํ๋๋ฐ ์ฌ์ฉ์(UserMIxin ์ธ์คํด์ค)์๊ฒ ์ญํ ์ ์ถ๊ฐํ๋ ค๊ณ ํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ๋ชจ๋ ๊ฒ์ ํตํฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
my_user = UserMixin()
my_user.add_roles('admin', 'superadmin')
db.session.add(my_user)
db.session.commit()
๊ทธ๋ฌ๋ ์ผ๋ฐ ์ฌ์ฉ์๋ฅผ ๋ง๋ค ๋ ์ผ๋ฐ์ ์ผ๋ก
my_user = User(name="xxx", email="[email protected]", pass="1234")
db.session.add(my_user)
db.session.commit()
๋ด ๋ชจ๋ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
class User(UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(50), nullable=False, unique=True)
password = db.Column(db.String(50), nullable=False)
def __init__(self, name, email, password, roles=None):
"""Setting params to the object."""
self.name = name
self.email = email.lower()
self.password = bcrypt.hashpw(
password.encode('utf-8'), bcrypt.gensalt())
UserMixin.__init__(self, roles)
.... other methods ...
๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ด๋ค ํ? :)
( ์ ๋ @bepetersn ํฌํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค)
์๋ ๋ ์ค, ๋ง์นจ๋ด ์ด๊ฒ์ ๋ณผ ๊ธฐํ๊ฐ ์๊ฒผ๊ณ ์ ํํ ์ค๋ฅ๋ฅผ ์์ฑํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ด์ผ๊ธฐํ ์ ์๋ ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ณด์๊ณ ์์ธ์ด ๋ฌด์์ธ์ง ์ ์ ์์ต๋๋ค(์๋์ ์ธ๊ธ๋จ). ๊ทธ๋ฌ๋ ์ข์ ์์์ https://github.com/bepetersn/flask-permissions-ex์์ ์์ ์ฌ์ฉ์ ๋ชจ๋ธ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ ์๋ํ๋ ์์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด ๋ด์ฉ์ ๋ณธ ์ง ์ผ๋ง ๋์ง ์์์ง๋ง ๋ด ํฌํฌ์ ๊ฐ์ฅ ํฐ ๋ณํ(re: ์์์ ์ธ๊ธํ ์ค๋ฅ)๋ ์ง๊ธ UserMixin์ ์ธ์คํด์คํํด์๋ ์ ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์ถ์ ๋ชจ๋ธ ๊ธฐ๋ฐ์ ๋๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ ์ฌ์ฉ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ก ์ธํด ๋ช ๊ฐ์ง ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ญํ ์ ์ค์ ํ ์ ์๋ค๋ ์ ์์ ๊ทํ์ ๋ค๋ฅธ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋น์ ์ด ๋ฌด์จ ์๊ฐ์ํ๋์ง ์ ๊ฒ ์๋ ค์ฃผ์ธ์.
์๋
๋ธ๋ผ์ด์ธ,
๋ด ์ฃผ์ ๋ฌธ์ ๋ ์ญํ ์ ๋ง๋ ๋ค์ ์ฌ์ฉ์์๊ฒ ์ถ๊ฐํ๋ ค๊ณ ํ ๋์
๋๋ค. ๋ฌธ์ ๊ฐ ๋ํ๋ฉ๋๋ค. :)
from app import db
from flask_permissions.models import UserMixin, Role
db.create_all()
superadmin.add_abilities(
'create_admin', 'edit_admin_user', 'delete_admin_user')
db.session.add(superadmin)
db.session.commit()
#....
first_user = UserMixin
first_user.add_roles('superadmin') ###triggers the error
db.session.add(first_user)
db.session.commit()
๋๋์ด ๋ผ์ธ์ผ๋ก ๊ฐ์ ํฉ๋๋ค ...
first_user = UserMixin
๋น์ ์ ์ด๊ฒ์ ์๋ฏธ ...
first_user = UserMixin()
๊ทผ๋ฐ ์ด๊ฑด ์ง์ง ํด์ผํด...
first_user = User()
(์ฌ๊ธฐ์ User
๋ ์ ์์ UserMixin
ํ์ ํด๋์ค์
๋๋ค).
UserMixin์ ํ์ ํด๋์ค์ฌ์ผ ํ๋ ์ฌ์ฉ์ ๋ชจ๋ธ๋ก ์ฌ์ฉ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๋ ์ด์ UserMixin์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๋ฌธ์ํ ์คํจ๋ก ๊ฐ์ฃผํ๊ณ ์์ผ๋ฏ๋ก ํ์ฌ ์ ์ฝ๋๋ก ์ฌ์ฉ์๋ฅผ ์ค์ ๋ก ์์ฑํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด README๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์์ต๋๋ค. ์ ๋ ์ด๊ฒ์ผ๋ก ํ ์คํธ๋ฅผ ๊ณ ์น ํ ๋๊น ๋๋์ด PR ์ค๋น ์๋ฃ!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋์ด ๋ผ์ธ์ผ๋ก ๊ฐ์ ํฉ๋๋ค ...
first_user = UserMixin
๋น์ ์ ์ด๊ฒ์ ์๋ฏธ ...
first_user = UserMixin()
๊ทผ๋ฐ ์ด๊ฑด ์ง์ง ํด์ผํด...
first_user = User()
(์ฌ๊ธฐ์
User
๋ ์ ์์UserMixin
ํ์ ํด๋์ค์ ๋๋ค).UserMixin์ ํ์ ํด๋์ค์ฌ์ผ ํ๋ ์ฌ์ฉ์ ๋ชจ๋ธ๋ก ์ฌ์ฉ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๋ ์ด์ UserMixin์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ๋ฌธ์ํ ์คํจ๋ก ๊ฐ์ฃผํ๊ณ ์์ผ๋ฏ๋ก ํ์ฌ ์ ์ฝ๋๋ก ์ฌ์ฉ์๋ฅผ ์ค์ ๋ก ์์ฑํ๋ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด README๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ์์ต๋๋ค. ์ ๋ ์ด๊ฒ์ผ๋ก ํ ์คํธ๋ฅผ ๊ณ ์น ํ ๋๊น ๋๋์ด PR ์ค๋น ์๋ฃ!