-1
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

1 Answers1

0

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.

jwag
  • 662
  • 5
  • 6
  • Then what can be the possible solution if we want to code manager class and put it in admin panel so superadmin can create manager. – Kenil Shah Feb 16 '22 at 16:24