我想添加對象級訪問控制。如何在web2py中實現對象/記錄級訪問控制?
(用假學生通知模式解釋它)
學生應該訪問(編輯/查看)的通知(消息)只有當學生都有相同的類(標準),並受指派爲通知。 有兩個角色/組 - 「學生」和「老師」
數據庫模式:
# model db.py
auth.define_tables(username=False, signature=True)
db.define_table('class', Field('name'))
db.define_table('subject', Field('name'))
db.define_table('notice', Field('title'),
Field('class', db.class),
Field('subject', db.subject))
db.define_table('user_class', Field('user', db.auth_user),
Field('class', db.class))
db.define_table('user_subject', Field('user', db.auth_user),
Field('subject', db.subject))
-
#controller default.py
def has_ownership():
# Check if logged in user has class and subject to view/edit this notice
pass
@auth.requires_login()
@auth.requires(lambda: has_ownership())
def notice():
user_classes = db(db.user_class.auth_user == auth.user.id).select()
user_class_list = [clss['id'] for clss in user_classes]
user_subjects = db(db.user_subject.auth_user == auth.user.id).select()
user_subject_list = [subject['id'] for subject in user_subjects]
query = db.notice.class.belongs(user_class_list) & db.notice.subject.belongs(user_subject_list)
grid = SQLFORM.grid(query, user_signature=True)
return dict(grid=grid)
的所有網址都進行數字簽名和還我顯示記錄網格根據用戶的主題和類別。
所以我的問題是隻有數字簽名的網址足以限制用戶訪問其他記錄? (通過在URL中更改ID) 或者我需要做額外的檢查,就像我使用裝飾器has_ownership
?
是否有任何其他替代方案來實現web2py中的對象級訪問控制?我不想使用CRUD。
謝謝
謝謝@Anthony。它幫助! –