我有一个使用flask-login的模板,并且我已经建立了一个基于位集的权限模型。在我的模板中,我想根据权限公开页面上的内容。我在我的用户模型中有一个名为can(permission)
的函数,用于控制用户可以做什么。
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True)
fullname = db.Column(db.String(75))
password_hash = db.Column(db.String(128))
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
@property
def password(self):
raise AttributeError('password is not a readable attribute')
@password.setter
def password(self, password):
self.password_hash = generate_password_hash(password)
def verify_password(self, password):
return check_password_hash(self.password_hash, password)
def can(self, permissions):
return self.role is not None and (self.role.permissions & permissions) == permissions
def __repr__(self):
return '<User: {}>'.format(self.email)
class Permission:
FOLLOW = 0x01
COMMENT = 0x02
WRITE_ARTICLES = 0x04
MODERATE_COMMENTS = 0x08
ADMINISTER = 0x80
当我在模板中尝试调用
can()
函数并传递权限时,我会收到一个错误,指出Permission未定义,这可能是因为Permission类对于模板不在作用域内。以下是所有其他模板都继承的base.html的部分内容:{% if current_user.can(Permission.ADMINISTER) %}
<h3>Administration</h3>
<ul>
<li><a href="{{ url_for('main.add_user') }}">Add User</a></li>
<li><a href="{{ url_for('main.change_password') }}">Change Password</a></li>
<li><a href="{{ url_for('main.lock_user') }}">Lock User</a></li>
</ul>
{% endif %}
我正在松散地跟随Miguel Grinberg的《Flask Web Development》这本书,并且他在base.html(第32行)中做相同的事情。
我如何使Permission类在我的模板中可用?