@neuro4live

Как используя flask-security добавить роль пользователю?

Добрый вечер! Использую расширение 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 нужного юзера и прописать ему нужную роль


Но всё-таки хотелось это реализовать через класс. И ещё как в таком случае ограничить доступ к странице регистарции только определенным ролям. Спасибо!
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы