Добрый вечер! Использую расширение flask-security для регистрации и авторизации пользователя. Возник вопрос... Создал форму для регистрации пользователя наследуя свойства от встроенного класса RegisterForm (как и написано в документации). В форме регистрации из поля селект выбирается роль для пользователя. Реализация ролей реализована следующим образом (как и указано в документации):
roles_users = db.Table(
'roles_users',
db.Column('id_user', db.Integer(), db.ForeignKey('user.id')),
db.Column('id_role', db.Integer(), db.ForeignKey('role.id'))
)
class User(db.Model, UserMixin):
id = db.Column(db.Integer(), primary_key=True)
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(255))
roles = db.relationship(
'Role',
secondary=roles_users,
backref=db.backref('users', lazy='dynamic')
)
class Role(db.Model, RoleMixin):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(100), unique=True)
Форма для регистрации выполнена следующим образом (как и описано в документации)
class MyRegisterForm(RegisterForm):
email = StringField("Email", validators=[Email(message='Вы ввели неккоректный email адрес!')],render_kw={"placeholder": "Email"})
role = SelectField('Роль', choices=['Роль_1', 'Роль_2', 'Роль_2'])
submit = SubmitField("Подтвердить")
Из всего этого возникает вопрос, как при регистрации сделать так чтобы пользователю присваивалась выбранная роль, я понимаю что нужно переопределить какой-то метод в классе. Знаю что можно это реализовать с помощью вьюхи, например так:
@app.route('/reg'):
def reg():
### дальше уже из формы получить нужные данные и сначала зарегать пользователя через функцию create_user и после получить id нужного юзера и прописать ему нужную роль
Но всё-таки хотелось это реализовать через класс. И ещё как в таком случае ограничить доступ к странице регистарции только определенным ролям. Спасибо!