Flask 用户权限控制:员工查看个人数据,领导查看全部数据
在 Flask 中,可以使用 Flask-Login 插件来实现员工只能看到自己的数据,而领导可以看见全部数据的功能。
首先,你需要安装 Flask-Login 插件。可以使用以下命令来安装:
pip install flask-login
然后,在你的 Flask 应用程序中,你需要创建一个 User 类来表示用户。User 类可以包含员工和领导的不同属性和方法。例如:
from flask_login import UserMixin
class User(UserMixin):
def __init__(self, id, username, password, is_leader):
self.id = id
self.username = username
self.password = password
self.is_leader = is_leader
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
接下来,你需要创建一个用于验证用户登录和加载用户的函数。例如:
from flask_login import LoginManager
# 创建登录管理器
login_manager = LoginManager()
@login_manager.user_loader
def load_user(user_id):
# 这个函数用于从数据库或其他存储中获取用户对象
# 返回用户对象或者None
return User.get(user_id)
然后,你需要在你的 Flask 应用程序中初始化和配置 Flask-Login 插件。例如:
from flask import Flask
from flask_login import login_required, current_user
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
# 初始化登录管理器
login_manager.init_app(app)
现在,你可以在你的视图函数中使用@login_required装饰器来限制只有登录用户才能访问该页面。例如:
@app.route('/employees')
@login_required
def employees():
if current_user.is_leader:
# 领导可以看到全部数据
employees = get_all_employees()
else:
# 员工只能看到自己的数据
employees = get_employee_by_id(current_user.id)
return render_template('employees.html', employees=employees)
在上面的代码中,current_user变量表示当前登录的用户对象。is_leader属性用于区分员工和领导。根据用户的角色,你可以在视图函数中查询不同的数据。
最后,你需要在登录过程中验证用户的角色,并将用户对象存储到 session 中。例如:
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 验证用户名和密码
user = authenticate_user(username, password)
if user:
login_user(user)
return redirect(url_for('employees'))
else:
flash('Invalid username or password.')
return render_template('login.html')
在上面的代码中,authenticate_user函数用于验证用户名和密码,并返回对应的用户对象。
以上就是在 Flask 中实现员工只能看到自己的数据,领导可以看见全部数据的方法。你可以根据你的实际需求进行修改和扩展。
原文地址: http://www.cveoy.top/t/topic/pbYz 著作权归作者所有。请勿转载和采集!