简体   繁体   中英

I want to implement manager class. So when we create user, we can define manager and under that defined manager we will create user

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'))
)

Above mentioned code is for roles_users table

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

    def __str__(self):
        return self.name

Above mentioned code build Role table and returns name of specific role(SuperAdmin, Admin, User)

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    first_name = db.Column(db.String(255))
    last_name = db.Column(db.String(255))
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))
    managername = db.Column(db.String(20))
    managers = db.relationship('Manager', backref='user', lazy='dynamic')

    def __str__(self):
        return self.first_name

Class User for user database

class Manager(db.Model, RoleMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20))
    email = db.Column(db.String(50))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True)

    def __repr__(self):
        return '<Manager %r>' %(self.username)

class manager for manager database

 user_datastore = SQLAlchemyUserDatastore(db, User, Role, Manager)
 security = Security(app, user_datastore)

** user_datastore =SQLAlchemyUserDatastore(db, User, Role, Manager) TypeError: init () takes 4 positional arguments but 5 were given

Looks like you are using flask-security - which of course has no concept of 'Manager' - so there isn't any reason to pass that class to flask-security constructor. The rest of the definition looks reasonable - so possibly a better question would be to describe what you are trying to do with your manager class in terms of authorization. Possibly, flask-security's support for permissions within roles would get you going in the right direction - Manager's could be given a role that has some extra permissions.... just conjecture.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM