mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-20 01:38:19 +08:00
更新权限节点
This commit is contained in:
1 parent
e092efca20
commit
b22082beba
16 files changed
+88
-87
No files matched your search
+16
-17
@@ -1,14 +1,19 @@
|
||||
const { isNull } = require('lodash');
|
||||
|
||||
const permission = require('../model/builtin').PERM;
|
||||
const { PRIV, PERM } = require('../model/builtin');
|
||||
|
||||
global.Hydro.ui.nav = [];
|
||||
|
||||
const trueChecker = () => true;
|
||||
const Checker = (perm, priv, checker = trueChecker) => (handler) => (
|
||||
checker(handler)
|
||||
&& (perm ? handler.user.hasPerm(perm) : true)
|
||||
&& (priv ? handler.user.hasPriv(priv) : true)
|
||||
);
|
||||
|
||||
const Item = (name, args, prefix, ...permPrivChecker) => {
|
||||
let _priv;
|
||||
let _perm;
|
||||
let checker;
|
||||
let checker = trueChecker;
|
||||
for (const item of permPrivChecker) {
|
||||
if (typeof item === 'object' && !isNull(item)) {
|
||||
if (typeof item.call !== 'undefined') {
|
||||
@@ -24,27 +29,21 @@ const Item = (name, args, prefix, ...permPrivChecker) => {
|
||||
_perm = item;
|
||||
}
|
||||
}
|
||||
if ((_perm || _priv) && checker) {
|
||||
checker = ((_chk) => (handler) => _chk(handler)
|
||||
&& (_perm ? handler.user.hasPerm(_perm) : true)
|
||||
&& (_priv ? handler.user.hasPriv(_priv) : true))(checker);
|
||||
} else if (_perm) {
|
||||
checker = (handler) => handler.user.hasPerm(_perm);
|
||||
} else if (!checker) checker = trueChecker;
|
||||
checker = Checker(_perm, _priv, checker);
|
||||
global.Hydro.ui.nav.push({
|
||||
name, args: args || {}, prefix, checker,
|
||||
});
|
||||
};
|
||||
|
||||
Item('homepage', null, 'homepage');
|
||||
Item('problem_main', null, 'problem', permission.PERM_VIEW_PROBLEM);
|
||||
Item('training_main', null, 'training', permission.PERM_VIEW_TRAINING);
|
||||
Item('homework_main', null, 'homework', permission.PERM_VIEW_HOMEWORK);
|
||||
Item('discussion_main', null, 'discussion', permission.PERM_VIEW_DISCUSSION);
|
||||
Item('contest_main', null, 'contest', permission.PERM_VIEW_CONTEST);
|
||||
Item('problem_main', null, 'problem', PERM.PERM_VIEW_PROBLEM);
|
||||
Item('training_main', null, 'training', PERM.PERM_VIEW_TRAINING);
|
||||
Item('homework_main', null, 'homework', PERM.PERM_VIEW_HOMEWORK);
|
||||
Item('discussion_main', null, 'discussion', PERM.PERM_VIEW_DISCUSSION);
|
||||
Item('contest_main', null, 'contest', PERM.PERM_VIEW_CONTEST);
|
||||
Item('record_main', null, 'record');
|
||||
Item('ranking', null, 'ranking');
|
||||
Item('domain_dashboard', null, 'domain', permission.PERM_MANAGE);
|
||||
Item('manage_dashboard', null, 'manage', null, (handler) => handler.user.priv === 1);
|
||||
Item('domain_dashboard', null, 'domain', PERM.PERM_EDIT_DOMAIN);
|
||||
Item('manage_dashboard', null, 'manage', PRIV.PRIV_SET_PRIV);
|
||||
|
||||
global.Hydro.lib.nav = module.exports = Item;
|
||||
Reference in new issue
Block a user