Flask Admin может редактировать пользователь может изменять свои данные - PullRequest
0 голосов
/ 31 марта 2019

Я использую Flask-Admin для управления моим CRUD. В моем приложении три роли: суперпользователь , оператор и клиент .

В этом приложении операторы должны попросить суперпользователя зарегистрировать свою учетную запись, изменить свои данные и другие.

Но для клиента, который не считает номера, я хочу, чтобы он мог зарегистрировать свою учетную запись или отредактировать информацию своей учетной записи самостоятельно.

На данный момент клиент может зарегистрироваться самостоятельно, но теперь я хочу, чтобы клиент мог редактировать свою информацию индивидуально без использования суперпользователя.

Пока что я могу редактировать информацию об учетной записи с помощью superuser , как на этом снимке экрана: enter image description here

Итак, на данный момент я хочу, чтобы клиент мог редактировать свое имя, адрес электронной почты, пароль или другую информацию самостоятельно, а также разделять свои данные с другими клиентами.

Вот фрагмент моей модели:

roles_users = db.Table(
    'roles_users',
    db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
    db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)

class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

class Operator(User):
    __tablename__ = 'operator'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))


class Client(User):
    __tablename__ = 'client'
    id = db.Column(db.Integer(), primary_key=True)
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))

Итак, как это сделать с Flask-Admin ..?

1 Ответ

1 голос
/ 01 апреля 2019

Flask-Security поставляется со встроенной формой и возможностью смены пароля.Я бы порекомендовал использовать это.https://pythonhosted.org/Flask-Security/customizing.html

Чтобы отредактировать информацию пользователя через представление Flask-Admin, вы можете переопределить эти методы, выполнив следующие действия.Не забудьте добавить «клиент» в качестве принятой роли в вашем классе пользователя flask-admin.Пользовательский фильтр должен фильтровать по current_user_id, поэтому никакой другой профиль пользователя не может быть отредактирован.

def get_query(self) 
    if "superuser" in current_user.roles:
        return self.session.query(self.model)  # as original source code

    else:  # for all other roles
        return self.session.query(self.model).filter(
            < insert custom filter here> )



def get_count_query(self): 
    if "superuser" in current_user.roles:
        return self.session.query(func.count('*')).select_from(self.model) # as original source code

    else: # for all other roles
        return self.session.query(func.count('*')).filter(
            <insert custom filter here>  )

Альтернативным решением будет создание пользовательского представления (без использования flask-admin) и вызов его / myprofile.

...