Untuk menambahkan tiga hak akses dan peran ke aplikasi Flask Anda, kita perlu menambahkan beberapa fungsi baru untuk memeriksa hak akses pengguna berdasarkan peran mereka. Berikut adalah langkah-langkah untuk menambahkan hak akses ini:
Baca juga: LOGIN DENGAN PYTHON FLASK TANPA MySQL??? Yuk simak caranya untuk pemula!!!
1. Tambahkan Peran ke Data Pengguna
Tambahkan informasi peran ke dalam data pengguna di app.py
.
from flask import Flask, render_template, request, redirect, url_for, flash,
session
from werkzeug.security import generate_password_hash, check_password_hash
app = Flask(__name__)
app.secret_key = 'your_secret_key'
# Dummy user data with roles
users = {
"admin":
{"password": generate_password_hash("password123"),
"role": "role1"},
"user1":
{"password": generate_password_hash("password123"),
"role": "role2"},
"user2":
{"password": generate_password_hash("password123"),
"role": "role3"}
}
# Access control mapping
access_control = {
"role1":
["page1", "page2", "page3"],
"role2":
["page2", "page3"],
"role3":
["page2"]
}
def check_access(role, page):
return page in
access_control.get(role, [])
@app.route('/')
def home():
if 'username' in session:
return
render_template('home.html', username=session['username'],
access_control=access_control)
return redirect(url_for('login'))
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username =
request.form['username']
password =
request.form['password']
user = users.get(username)
if user and
check_password_hash(user['password'], password):
session['username'] =
username
session['role'] =
user['role']
flash('Login successful!')
return
redirect(url_for('home'))
else:
flash('Invalid username or
password')
return
render_template('login.html')
@app.route('/logout')
def logout():
session.pop('username', None)
session.pop('role', None)
flash('You have been logged out.')
return redirect(url_for('login'))
@app.route('/page1')
def page1():
if 'username' in session and
check_access(session['role'], 'page1'):
return
render_template('page1.html')
else:
flash('Access denied.')
return
redirect(url_for('home'))
@app.route('/page2')
def page2():
if 'username' in session and
check_access(session['role'], 'page2'):
return
render_template('page2.html')
else:
flash('Access denied.')
return
redirect(url_for('home'))
@app.route('/page3')
def page3():
if 'username' in session and
check_access(session['role'], 'page3'):
return
render_template('page3.html')
else:
flash('Access denied.')
return
redirect(url_for('home'))
if __name__ == '__main__':
app.run(debug=True)
2. Update home.html
untuk Menyertakan Tautan Berdasarkan Peran
Ubah template home.html
untuk menampilkan tautan berdasarkan peran pengguna.
Baca juga: Menambahkan Beberapa Link pada halaman | Python Flask
templates/home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta
charset="UTF-8">
<title>Home</title>
<link
rel="stylesheet" type="text/css" href="{{
url_for('static', filename='style.css') }}">
</head>
<body>
<div
class="container">
<h1>Welcome, {{ username
}}!</h1>
<ul>
{% if 'page1' in
access_control[session['role']] %}
<li><a
href="{{ url_for('page1') }}">Page 1</a></li>
{% endif %}
{% if 'page2' in
access_control[session['role']] %}
<li><a
href="{{ url_for('page2') }}">Page 2</a></li>
{% endif %}
{% if 'page3' in
access_control[session['role']] %}
<li><a
href="{{ url_for('page3') }}">Page 3</a></li>
{% endif %}
</ul>
<a href="{{
url_for('logout') }}">Logout</a>
</div>
</body>
</html>
Dengan menambahkan variabel access_control
ke konteks render_template
,
template home.html
sekarang
dapat mengakses variabel tersebut.
3. Jalankan Ulang Aplikasi
Jalankan kembali aplikasi Flask Anda dengan perintah berikut:
python app.py
Baca juga: Cara Menambahkan CSS Python Flask
Sekarang, saat pengguna login, mereka hanya akan melihat tautan ke halaman
yang diizinkan berdasarkan peran mereka, dan mereka hanya dapat mengakses
halaman-halaman tersebut sesuai dengan hak akses yang diberikan. Jika pengguna
mencoba mengakses halaman yang tidak diizinkan, mereka akan diarahkan kembali
ke halaman utama dengan pesan "Access denied".
Komentar
Posting Komentar