def checkACL(modFuncName=None):
def _check(f):
@wraps(f)
def wrapper(*args, **kwargs):
if modFuncName is not None:
# check mod register
ModFunc = ModFuncRegisterModel.query\
.filter_by(function_name=modFuncName)\
.first()
if ModFunc is None:
ret = {
'errcode': 1,
'errmsg': 'ModFunc not exist',
}
return jsonify(ret)
# TODO why ModFunc exists Mod not exists?
systemMod = ModRegisterModel.query\
.filter_by(id=ModFunc.mod_id)\
.first()
if systemMod is None:
ret = {
'errcode': 1,
'errmsg': 'Mod not exist',
}
return jsonify(ret)
# check company mod permission
companyMod = CompanyModModel.query\
.filter_by(mod_id=systemMod.id)\
.filter_by(company_id=current_user.company_id)\
.first()
if companyMod is None:
ret = {
'errcode': 2,
'errmsg': 'Company does not have this mod',
}
return jsonify(ret)
# check ACL
# list user role
roleModel_list = CompanyUserRoleModel.query\
.with_entities(CompanyUserRoleModel.role_id)\
.filter_by(company_id=current_user.company_id)\
.filter_by(user_id=current_user.id)\
.all()
if not roleModel_list:
ret = {
'errcode': 1,
'errmsg': 'Permission denied'
}
return jsonify(ret)
roleModel_list = [item[0] for item in roleModel_list]
# list user role acl
permission = CompanyRoleACLModel.query\
.filter_by(company_id=current_user.company_id)\
.filter_by(modfunc_id=ModFunc.id)\
.filter_by(acl='allow')\
.filter(CompanyRoleACLModel.role_id.in_(roleModel_list))\
.count()
if permission < 1:
ret = {
'errcode': 1,
'errmsg': 'Permission denied'
}
return jsonify(ret)
return f(*args, **kwargs)
return wrapper
return _check
from basesite.configs import attachments
from basesite.models.sysModel import AttachmentsModel
def attachStorage(req, form_name=None, allow_ext=None):
ret = []
# TODO check req type
# it should be flask.request
if form_name is None:
return ret
uploaded_files = req.files.getlist(form_name)
for item in uploaded_files:
_, ext = os.path.splitext(item.filename)
if '.' in ext:
ext = ext[1:].lower()
if allow_ext is not None:
if ext not in allow_ext:
# TODO raise exception
return []
filename = attachments.save(item)
attach = AttachmentsModel(
company_id=current_user.company_id,
user_id=current_user.id,
ext=ext,
filename=item.filename,
location=attachments.path(filename),
)
db.session.add(attach)
db.session.flush()
ret.append(attach.id)
db.session.commit()
return ret
acl
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來法褥,“玉大人茫叭,你說我怎么就攤上這事“氲龋” “怎么了揍愁?”我有些...
- 文/花漫 我一把揭開白布狼牺。 她就那樣靜靜地躺著羡儿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪是钥。 梳的紋絲不亂的頭發(fā)上掠归,一...
- 文/蒼蘭香墨 我猛地睜開眼鸥鹉,長吁一口氣:“原來是場噩夢啊……” “哼蛮穿!你這毒婦竟也來了?” 一聲冷哼從身側響起毁渗,我...
- 正文 年R本政府宣布朋贬,位于F島的核電站凯楔,受9級特大地震影響,放射性物質發(fā)生泄漏锦募。R本人自食惡果不足惜摆屯,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虐骑,春花似錦准验、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至颠黎,卻和暖如春另锋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背狭归。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 1拆宛、HAProxy簡介 HAProxy 是一款高性能TCP/HTTP 反向代理負載均衡服務器,具有如下功能: 根據...
- Internet網關: Internet網關是VPC的一個組件炎滞,能夠實現VPC中的實例和互聯網之間的通信敢艰。在子網的...
- MQTT ACL 1、ACL 訪問控制列表a册赛、用戶控制b钠导、發(fā)布控制c、訂閱控制 客戶端代碼 自定義訪問控制列表 ...
- 十月。 在2016年最后一場過境福州的臺風中措伐,我?guī)е脺绲奶摕o勁和宿醉未醒的迷茫感特纤,出發(fā)去瀨戶內海。 出關的時候是...