hxp
2024-12-16 3bc897685e16d0855fec1aebaee3c90466fa851b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
<?php
 
namespace User;
 
include_once "/Common/CommFunc.php";
include_once "/db/DBOper.php";
 
static $PermissionModules = NULL;
 
/**
 * 模块权限分组 {模块分组名:{"后台权限key":{"Name":描述名称, "GMTKey1":array(普通GMT命令列表), "GMTKey2":array(高级GMT命令列表)}, ...}, ...}
 * 注意区分 后台权限key 与 GMT命令权限key
 * 后台权限key      仅用于后台网站管理的权限,不同的后台权限key可能对应相同的 GMT命令权限key,也可能没有对应的GMT命令权限
 * GMT命令权限key   游戏服务器用于接收GMT命令时验证的权限,区分普通命令及高级命令,对应 GMTKey1 GMTKey2
 */
function GetPermissionModules()
{
    global $PermissionModules;
    if (!isset($PermissionModules)) {
        $PermissionModules = array(
            array(
                "ModuleID" => "ServerRep",
                "Name" => \Lang\gettext("全服报表"),
                "PList" => array(
                    Permission::P_REP_AllView => array("Name" => \Lang\gettext("全服总览")),
                    Permission::P_REP_DailyUser => array("Name" => \Lang\gettext("全服每日用户")),
                    Permission::P_REP_KeepLogin => array("Name" => \Lang\gettext("全服留存")),
                    Permission::P_REP_LTV => array("Name" => \Lang\gettext("全服LTV")),
                    Permission::P_REP_FirstLoginFirstPayCnt => array("Name" => \Lang\gettext("首登首充人数")),
                    Permission::P_REP_XPayPaycnt => array("Name" => \Lang\gettext("购买X礼包再次付费人数")),
                    Permission::P_All_PlayerLV => array("Name" => \Lang\gettext("全服等级分布")),
                )
            ),
            array(
                "ModuleID" => "ServerInfo",
                "Name" => \Lang\gettext("服务器"),
                "PList" => array(
                    Permission::P_Online => array("Name" => \Lang\gettext("在线人数")),
                    Permission::P_PlayerLV => array("Name" => \Lang\gettext("等级分布")),
                    Permission::P_Chatmonitor => array("Name" => \Lang\gettext("聊天监控")),
                    Permission::P_BugReport => array("Name" => \Lang\gettext("Bug反馈")),
                    Permission::P_Serverview => array("Name" => \Lang\gettext("本服总览")),
                    Permission::P_PayOverview => array("Name" => \Lang\gettext("充值总览")),
                    Permission::P_PayOrder => array("Name" => \Lang\gettext("充值订单")),
                    Permission::P_PayRank => array("Name" => \Lang\gettext("充值排行")),
                    Permission::P_CTGReportAll => array("Name" => \Lang\gettext("充值分析")),
                    Permission::P_PlayerList => array("Name" => \Lang\gettext("玩家列表")),
                )
            ),
            array(
                "ModuleID" => "Comm",
                "Name" => \Lang\gettext("普通命令"),
                "PList" => array(
                    Permission::P_BroadCast => array("Name" => \Lang\gettext("广播"), "GMTKey1" => array("GMT_BroadCast"), "Log" => array("GMT_BroadCast")),
                    Permission::P_BroadCastMulti => array("Name" => \Lang\gettext("多服广播"), "GMTKey1" => array("GMT_BroadCast"), "Log" => array("GMT_BroadCast")),
                    Permission::P_ClearTalkCache => array("Name" => \Lang\gettext("清空聊天缓存"), "GMTKey1" => array("GMT_ClearTalkCache"), "Log" => array("GMT_ClearTalkCache")),
                    Permission::P_ForbidTalk => array(
                        "Name" => \Lang\gettext("禁言/解禁"), "GMTKey1" => array("GMT_ForbidTalk", "GMT_UnForbidTalk"),
                        "Log" => array("GMT_ForbidTalk", "GMT_UnForbidTalk")
                    ),
                    Permission::P_ForbidLogin => array(
                        "Name" => \Lang\gettext("封号/解封"), "GMTKey1" => array("GMT_ForbidLogin", "GMT_LockIP", "GMT_UnLockIP", "GMT_UnForbidLogin"),
                        "Log" => array("GMT_ForbidLogin", "GMT_LockIP", "GMT_UnLockIP", "GMT_UnForbidLogin")
                    ),
                    Permission::P_KickPlayer => array("Name" => \Lang\gettext("踢下线"), "GMTKey1" => array("GMT_KickPlayer"), "Log" => array("GMT_KickPlayer")),
                    Permission::P_GetPlayerForbid => array("Name" => \Lang\gettext("查询玩家封禁状态"), "GMTKey1" => array("GMT_GetPlayerForbid")),
                    Permission::P_GetForbidInfo => array("Name" => \Lang\gettext("查询全服封禁名单"), "GMTKey1" => array("GMT_GetForbidInfo")),
                    Permission::P_GetPlayerInfo => array("Name" => \Lang\gettext("查询玩家"), "GMTKey1" => array("GMT_GetPlayerInfo", "GMT_PlayerItemInfo")),
                    Permission::P_GetFamilyInfo => array("Name" => \Lang\gettext("查询仙盟"), "GMTKey1" => array("GMT_GetFamilyInfo")),
                    Permission::P_FamilyTransfer => array("Name" => \Lang\gettext("转让仙盟"), "GMTKey1" => array("GMT_FamilyTransfer"), "Log" => array("GMT_FamilyTransfer")),
                    Permission::P_FamilyDismiss => array("Name" => \Lang\gettext("解散仙盟"), "GMTKey1" => array("GMT_FamilyDismiss"), "Log" => array("GMT_FamilyDismiss")),
                    Permission::P_QueryBillboard => array("Name" => \Lang\gettext("查询排行榜"), "GMTKey1" => array("GMT_QueryBillboard")),
                    Permission::P_QueryBillboardCross => array("Name" => \Lang\gettext("查询跨服排行榜"), "GMTKey1" => array("GMT_QueryBillboardCross")),
                    Permission::P_MagicWeaponExp => array("Name" => \Lang\gettext("法宝灵魂"), "GMTKey1" => array("GMT_MagicWeaponExp")),
                    Permission::P_UserLog => array("Name" => \Lang\gettext("查看动态")),
                )
            ),
            array(
                "ModuleID" => "Super",
                "Name" => \Lang\gettext("高级命令"),
                "PList" => array(
                    Permission::P_CTGReq  => array(
                        "Name" => \Lang\gettext("充值申请"), "GMTKey2" => array("GMT_CTG"), "Title" => \Lang\gettext("如果没有充值免审权限则申请后需要审核"),
                        "Log" => array("GMT_CTG"), "NOCheck" => Permission::P_CTGNOCheck, "Check" => Permission::P_CTGCheck
                    ),
                    Permission::P_CTGNOCheck  => array("Name" => \Lang\gettext("充值免审"), "GMTKey2" => array("GMT_CTG"), "Title" => \Lang\gettext("可免审核直接充值")),
                    Permission::P_CTGCheck  => array("Name" => \Lang\gettext("充值审核")),
                    Permission::P_AddPayCoin => array("Name" => \Lang\gettext("发放代币"), "GMTKey2" => array("GMT_AddPayCoin"), "Log" => array("GMT_AddPayCoin")),
                    Permission::P_DelPlayerMoney => array("Name" => \Lang\gettext("扣除玩家货币"), "GMTKey2" => array("GMT_DelPlayerMoney"), "Log" => array("GMT_DelPlayerMoney")),
                    Permission::P_DelPlayerItem => array("Name" => \Lang\gettext("扣除玩家物品"), "GMTKey2" => array("GMT_DelPlayerItem"), "Log" => array("GMT_DelPlayerItem")),
                    Permission::P_SetGMLevel => array("Name" => \Lang\gettext("设置玩家GM"), "GMTKey2" => array("GMT_SetGMLevel"), "Log" => array("GMT_SetGMLevel")),
                    Permission::P_Face => array("Name" => \Lang\gettext("头像管理"), "GMTKey2" => array("GMT_Face"), "Log" => array("GMT_Face")),
                    Permission::P_AddTitle => array("Name" => \Lang\gettext("称号管理"), "GMTKey2" => array("GMT_AddTitle"), "Log" => array("GMT_AddTitle")),
                    Permission::P_Worship => array("Name" => \Lang\gettext("膜拜管理"), "GMTKey2" => array("GMT_Worship")),
                    Permission::P_AddAuctionItem => array("Name" => \Lang\gettext("上架拍品"), "GMTKey2" => array("GMT_AddAuctionItem")),
                    Permission::P_RefixWorldLV => array("Name" => \Lang\gettext("纠正世界等级"), "GMTKey2" => array("GMT_RefixWorldLV")),
                    Permission::P_BourseOnOff => array("Name" => \Lang\gettext("交易所开关"), "GMTKey2" => array("GMT_BourseOnOff")),
                    Permission::P_CrossActServerIDChange => array("Name" => \Lang\gettext("跨服活动区服ID修改"), "GMTKey2" => array("GMT_CrossActServerIDChange")),
                    Permission::P_CrossBattleChampionSet => array("Name" => \Lang\gettext("跨服战场冠军赛"), "GMTKey2" => array("GMT_CrossBattleChampionSet")),
                    Permission::P_Execfile => array("Name" => \Lang\gettext("执行命令"), "GMTKey2" => array("GMT_Execfile"), "Log" => array("GMT_Execfile")),
                )
            ),
            array(
                "ModuleID" => "Mail",
                "Name" => \Lang\gettext("邮件"),
                "PList" => array(
                    Permission::P_ServerMailSend => array(
                        "Name" => \Lang\gettext("全服邮件发送"), "GMTKey2" => array("GMT_AddEntireCompensation"), "Title" => \Lang\gettext("如果没有免审权限则发送后需要审核"),
                        "Log" => array("GMT_AddEntireCompensation"), "NOCheck" => Permission::P_ServerMailNOCheck, "Check" => Permission::P_ServerMailCheck
                    ),
                    Permission::P_ServerMailTempMgr => array("Name" => \Lang\gettext("全服邮件模板管理")),
                    Permission::P_ServerMailNOCheck => array(
                        "Name" => \Lang\gettext("全服邮件免审"), "GMTKey2" => array("GMT_AddEntireCompensation"),
                        "Title" => \Lang\gettext("可免审核直接发送全服邮件")
                    ),
                    Permission::P_ServerMailCheck => array("Name" => \Lang\gettext("全服邮件审核")),
                    Permission::P_ServerMailMgr => array(
                        "Name" => \Lang\gettext("全服邮件管理"), "GMTKey2" => array("GMT_CompensationQuery", "GMT_CompensationMgr"), "Title" => \Lang\gettext("查询删除全服邮件"),
                        "Log" => array("GMT_CompensationMgr")
                    ),
                    Permission::P_PersonalMailSend => array(
                        "Name" => \Lang\gettext("个人邮件发送"), "GMTKey2" => array("GMT_AddPersonalCompensation"), "Title" => \Lang\gettext("如果没有免审权限则发送后需要审核"),
                        "Log" => array("GMT_AddPersonalCompensation"), "NOCheck" => Permission::P_PersonalMailNOCheck, "Check" => Permission::P_PersonalMailCheck
                    ),
                    Permission::P_PersonalMailTempMgr => array("Name" => \Lang\gettext("个人邮件模板管理")),
                    Permission::P_PersonalMailNOCheck => array(
                        "Name" => \Lang\gettext("个人邮件免审"), "GMTKey2" => array("GMT_AddPersonalCompensation"),
                        "Title" => \Lang\gettext("可免审核直接发送个人邮件")
                    ),
                    Permission::P_PersonalMailCheck => array("Name" => \Lang\gettext("个人邮件审核")),
                    Permission::P_PersonalMailMgr => array(
                        "Name" => \Lang\gettext("个人邮件管理"), "GMTKey2" => array("GMT_CompensationQueryPersonal"), "Title" => \Lang\gettext("查询删除玩家未领取的邮件"),
                        "Log" => array("GMT_CompensationQueryPersonal")
                    ),
                )
            ),
            array(
                "ModuleID" => "DR",
                "Name" => \Lang\gettext("流向查询"),
                "PList" => array(
                    Permission::P_DREntry => array("Name" => \Lang\gettext("流向查询入口")),
                    Permission::P_DRCTGOKSort => array("Name" => \Lang\gettext("充值查询")),
                    Permission::P_ExchangePayCoin => array("Name" => \Lang\gettext("转代币记录")),
                    // Permission::P_DRCTGReport => array("Name" => \Lang\gettext("充值分析")),
                    Permission::P_DRPersonalMail => array("Name" => \Lang\gettext("个人邮件")),
                    Permission::P_DRServerView => array("Name" => \Lang\gettext("区服总览(当前服生态)")),
                    Permission::P_DRServerSum => array("Name" => \Lang\gettext("区服汇总")),
                    Permission::P_DRPlayerMoneyDR => array("Name" => \Lang\gettext("货币查询")),
                    Permission::P_DRPlayerItemDR => array("Name" => \Lang\gettext("物品查询")),
                    Permission::P_DRBuyStoreItem => array("Name" => \Lang\gettext("商城分析")),
                    Permission::P_DRTreasure => array("Name" => \Lang\gettext("寻宝分析")),
                    Permission::P_DRServerKeepLogin => array("Name" => \Lang\gettext("留存分析")),
                    Permission::P_DRServerLTV => array("Name" => \Lang\gettext("LTV分析")),
                    Permission::P_DRFightPowerModule => array("Name" => \Lang\gettext("战力分析")),
                    Permission::P_DRVIPLVInfo => array("Name" => \Lang\gettext("VIP等级")),
                )
            ),
            array(
                "ModuleID" => "OPS",
                "Name" => \Lang\gettext("运维管理"),
                "PList" => array(
                    Permission::P_OPSPackBranch => array("Name" => \Lang\gettext("打包分支管理")),
                    Permission::P_OPSVersionState => array("Name" => \Lang\gettext("版本状态管理")),
                    Permission::P_OPSGameVersion  => array("Name" => \Lang\gettext("内容版本管理")),
                    Permission::P_OPSServerList  => array("Name" => \Lang\gettext("服务器列表")),
                    Permission::P_OPSServerStateMgr  => array("Name" => \Lang\gettext("服务器状态管理"), "Log" => array("1")),
                    Permission::P_OPSRefreshServer  => array("Name" => \Lang\gettext("刷新选服列表"), "Log" => array("1")),
                    Permission::P_SetOpenServerTime => array("Name" => \Lang\gettext("设置开服时间"), "GMTKey2" => array("GMT_SetOpenServerTime")),
                    Permission::P_CrossServerMaintain => array("Name" => \Lang\gettext("跨服主服维护"), "GMTKey2" => array("GMT_CrossServerMaintain")),
                    Permission::P_CrossClientServerMaintain => array("Name" => \Lang\gettext("跨服子服维护"), "GMTKey2" => array("GMT_CrossClientServerMaintain")),
                    Permission::P_VersionLog  => array("Name" => \Lang\gettext("版本更新日志")),
                )
            ),
            array(
                "ModuleID" => "Account",
                "Name" => \Lang\gettext("账号权限"),
                "PList" => array(
                    Permission::P_PermissionGroup => array("Name" => \Lang\gettext("权限分组")),
                    Permission::P_UserMgr => array("Name" => \Lang\gettext("账号管理")),
                )
            ),
        );
    }
    return $PermissionModules;
}
 
/**
 * 获取所有权限信息
 */
function GetPermissionAll()
{
    $PermissionAll = array();
    foreach (GetPermissionModules() as $mInfo) {
        $PermissionAll = array_merge($PermissionAll, $mInfo["PList"]);
    }
    return $PermissionAll;
}
 
function GetPermissionInfo($Permission)
{
    foreach (GetPermissionModules() as $mInfo) {
        if (array_key_exists($Permission, $mInfo["PList"])) {
            return $mInfo["PList"][$Permission];
        }
    }
    return array();
}
 
// 权限配置
class Permission
{
    /**管理员默认分组名 */
    const GroupAdmin = "admin";
    const P_System = "P_System";
 
    //全服报表
    const P_REP_AllView = "P_REP_AllView";
    const P_REP_DailyUser = "P_REP_DailyUser";
    const P_REP_KeepLogin = "P_REP_KeepLogin";
    const P_REP_LTV = "P_REP_LTV";
    const P_REP_FirstLoginFirstPayCnt = "P_REP_FirstLoginFirstPayCnt";
    const P_REP_XPayPaycnt = "P_REP_XPayPaycnt";
    const P_All_PlayerLV = "P_All_PlayerLV";
 
    //服务器
    const P_Online = "P_Online";
    const P_PlayerLV = "P_PlayerLV";
    const P_Chatmonitor = "P_Chatmonitor";
    const P_BugReport = "P_BugReport";
    const P_Serverview = "P_Serverview";
    const P_PayOverview = "P_PayOverview";
    const P_PayOrder = "P_PayOrder";
    const P_PayRank = "P_PayRank";
    const P_CTGReportAll = "P_CTGReportAll";
    const P_PlayerList = "P_PlayerList";
 
    //普通命令权限
    const P_BroadCast = "P_BroadCast";
    const P_BroadCastMulti = "P_BroadCastMulti";
    const P_ClearTalkCache = "P_ClearTalkCache";
    const P_ForbidTalk = "P_ForbidTalk";
    const P_ForbidLogin = "P_ForbidLogin";
    const P_KickPlayer = "P_KickPlayer";
    const P_GetPlayerForbid = "P_GetPlayerForbid";
    const P_GetForbidInfo = "P_GetForbidInfo";
    const P_GetPlayerInfo = "P_GetPlayerInfo";
    const P_GetFamilyInfo = "P_GetFamilyInfo";
    const P_FamilyTransfer = "P_FamilyTransfer";
    const P_FamilyDismiss = "P_FamilyDismiss";
    const P_QueryBillboard = "P_QueryBillboard";
    const P_QueryBillboardCross = "P_QueryBillboardCross";
    const P_MagicWeaponExp = "P_MagicWeaponExp";
    const P_UserLog = "P_UserLog";
 
    //高级命令权限
    const P_CTGReq = "P_CTGReq";
    const P_CTGNOCheck = "P_CTGNOCheck";
    const P_CTGCheck = "P_CTGCheck";
    const P_AddPayCoin = "P_AddPayCoin";
    const P_DelPlayerMoney = "P_DelPlayerMoney";
    const P_DelPlayerItem = "P_DelPlayerItem";
    const P_SetGMLevel = "P_SetGMLevel";
    const P_AddTitle = "P_AddTitle";
    const P_Face = "P_Face";
    const P_Worship = "P_Worship";
    const P_AddAuctionItem = "P_AddAuctionItem";
    const P_RefixWorldLV = "P_RefixWorldLV";
    const P_BourseOnOff = "P_BourseOnOff";
    const P_CrossActServerIDChange = "P_CrossActServerIDChange";
    const P_CrossBattleChampionSet = "P_CrossBattleChampionSet";
    const P_Execfile = "P_Execfile";
 
    //邮件权限
    const P_ServerMailSend = "P_ServerMailSend";
    const P_ServerMailTempMgr = "P_ServerMailTempMgr";
    const P_ServerMailNOCheck = "P_ServerMailNOCheck";
    const P_ServerMailCheck = "P_ServerMailCheck";
    const P_ServerMailMgr = "P_ServerMailMgr";
    const P_PersonalMailSend = "P_PersonalMailSend";
    const P_PersonalMailTempMgr = "P_PersonalMailTempMgr";
    const P_PersonalMailNOCheck = "P_PersonalMailNOCheck";
    const P_PersonalMailCheck = "P_PersonalMailCheck";
    const P_PersonalMailMgr = "P_PersonalMailMgr";
 
    //流向权限
    const P_DREntry = "P_DREntry";
    const P_DRCTGOKSort = "P_DRCTGOKSort";
    const P_ExchangePayCoin = "P_ExchangePayCoin";
    const P_DRCTGReport = "P_DRCTGReport";
    const P_DRPersonalMail = "P_DRPersonalMail";
    const P_DRServerView = "P_DRServerView";
    const P_DRServerSum = "P_DRServerSum";
    const P_DRPlayerMoneyDR = "P_DRPlayerMoneyDR";
    const P_DRPlayerItemDR = "P_DRPlayerItemDR";
    const P_DRBuyStoreItem = "P_DRBuyStoreItem";
    const P_DRTreasure = "P_DRTreasure";
    const P_DRServerKeepLogin = "P_DRServerKeepLogin";
    const P_DRServerLTV = "P_DRServerLTV";
    const P_DRFightPowerModule = "P_DRFightPowerModule";
    const P_DRVIPLVInfo = "P_DRVIPLVInfo";
 
    //运维权限
    const P_OPSPackBranch = "P_OPSPackBranch";
    const P_OPSVersionState = "P_OPSVersionState";
    const P_OPSGameVersion = "P_OPSGameVersion";
    const P_OPSServerList = "P_OPSServerList";
    const P_OPSServerStateMgr = "P_OPSServerStateMgr";
    const P_OPSRefreshServer = "P_OPSRefreshServer";
    const P_SetOpenServerTime = "P_SetOpenServerTime";
    const P_CrossServerMaintain = "P_CrossServerMaintain";
    const P_CrossClientServerMaintain = "P_CrossClientServerMaintain";
    const P_VersionLog = "P_VersionLog";
 
    //===================== 账号管理权限 =======================
    /**权限分组 */
    const P_PermissionGroup = "P_PermissionGroup";
    /**账号管理权限 - 增删改 */
    const P_UserMgr = "P_UserMgr";
}
 
// 审核状态定义
class GMTCheckState
{
    /**免审/审核通过 */
    const OK = 1;
    /**未审核 */
    const UnCheck = 2;
    /**审核不通过 */
    const Refuse = 3;
    public static function StateNameInfo()
    {
        return array(
            GMTCheckState::OK => \Lang\gettext("通过"),
            GMTCheckState::UnCheck => \Lang\gettext("未审核"),
            GMTCheckState::Refuse => \Lang\gettext("拒绝")
        );
    }
}
 
class UserLV
{
    /**超级管理员,只能有一个超级管理员账号,可管理所有组织及成员 */
    const ADMIN_SUPER = 99;
    /**组织单位管理员,每个组织单位可以拥有多个组织管理员,仅可管理该组织成员 */
    const ADMIN_ORG = 90;
    /**后台普通账号 */
    const COMM = 0;
    public static function LVNameInfo()
    {
        return array(
            UserLV::COMM => \Lang\gettext("普通账号"),
            UserLV::ADMIN_ORG => \Lang\gettext("管理员"),
            UserLV::ADMIN_SUPER => \Lang\gettext("超级管理员")
        );
    }
}
 
class User
{
    private $m_sErrInfo;
    private $userData;
    private $permissions;
    private $serversArray;
 
    function __construct($UserAccount)
    {
        \DBOper\FindOne("GMTUser", array("UserAccount" => $UserAccount), $this->userData);
        if (!isset($this->userData) || $this->userData["UserAccount"] != $UserAccount) {
            $this->m_sErrInfo = "can not found UserAccount:" . $UserAccount;
            \Logging\LogError($this->m_sErrInfo);
            header("location:/Account/login.php");
            return;
        }
    }
 
    public function GetAttr($attrName)
    {
        return $this->userData[$attrName];
    }
 
    public function IsAdminSuper()
    {
        return $this->userData["UserLV"] == UserLV::ADMIN_SUPER;
    }
 
    public function IsAdminOrg()
    {
        return $this->userData["UserLV"] == UserLV::ADMIN_ORG;
    }
 
    //运营ID数组,所有的
    public function GetSPIDAll()
    {
        if ($this->IsAdminSuper()) {
            return \CommFunc\GetAllChannel();
        }
        if ($this->IsAdminOrg()) {
            return \CommFunc\GetOrganizationChannel($this->userData["Organization"]);
        }
        return $this->userData["SPList"];
    }
 
    //运营ID,当前选择的
    public function GetSPID()
    {
        $spid = $_SESSION['spid'];
        return $spid;
    }
 
    //根据指定的spid获取对应服务器列表配置
    public function GetServersCfg($spid, $checkSpecial = true)
    {
        $ConfigFile = dirname(__FILE__) . "\Server\Server_" . $spid . ".ini";
        if (file_exists($ConfigFile)) {
            $serversCfg = parse_ini_file($ConfigFile, true);
            if (!$checkSpecial) {
                return $serversCfg;
            }
            $UserAccount = $this->userData["UserAccount"];
            \CommFunc\GetConfig("ServerInfo", "SpecialServerIDStart", $SpecialServerIDStart);
            \CommFunc\GetConfig("ServerInfo", "SpecialAccountList", $SpecialAccountList);
            $SpecialAccountList = explode(",", $SpecialAccountList);
            $SpecialServerIDStart = intval($SpecialServerIDStart);
            // 特殊账号,只能看指定服及以上
            if (in_array($UserAccount, $SpecialAccountList)) {
                foreach ($serversCfg as $key => $info) {
                    $ServerID = intval($info["ServerID"]);
                    if ($ServerID < $SpecialServerIDStart) {
                        unset($serversCfg[$key]);
                    }
                }
                return $serversCfg;
            }
            return $serversCfg;
        }
        if ($spid) {
            echo "file is not exist: " . "Server_" . $spid . ".ini" . "<br/>";
        }
        return array();
    }
 
    //重置服务器列表
    public function ResetServers()
    {
        $this->serversArray = null;
    }
 
    //获取账号spid对应服务器列表配置
    public function GetServers()
    {
        if ($this->serversArray != null) {
            return $this->serversArray;
        }
        $spid = $this->GetSPID();
        $serversCfg = $this->GetServersCfg($spid, false);
        if (!count($serversCfg)) {
            return $serversCfg;
        }
        $this->serversArray = $serversCfg;
 
        $UserAccount = $this->userData["UserAccount"];
        \CommFunc\GetConfig("ServerInfo", "SpecialServerIDStart", $SpecialServerIDStart);
        \CommFunc\GetConfig("ServerInfo", "SpecialAccountList", $SpecialAccountList);
        $SpecialAccountList = explode(",", $SpecialAccountList);
        $SpecialServerIDStart = intval($SpecialServerIDStart);
        $isSpecialUser = in_array($UserAccount, $SpecialAccountList);
        $specialServerID = 270; // 270服特殊处理,被合到270以前的服了
        $specialMainServerID = 0; // 特殊服所属主服
        if ($isSpecialUser) {
            foreach ($serversCfg as $info) {
                $ServerID = intval($info["ServerID"]);
                if ($ServerID == $specialServerID && $info["MainServer"]) {
                    $specialMainServerID = intval($info["MainServer"]);
                    break;
                }
            }
        }
 
        # 统计合服列表
        $mixServerArray = array();
        foreach ($this->serversArray as $serverName => $serverInfo) {
            $mainServerID = $serverInfo["MainServer"];
            if (!$mainServerID) {
                $mainServerID = $serverInfo["ServerID"];
            }
            if (!$mainServerID) {
                continue;
            }
            if (!array_key_exists($mainServerID, $mixServerArray)) {
                $mixServerArray[$mainServerID] = array("MixServerIDList" => array(), "MixServerStr" => "");
            }
            array_push($mixServerArray[$mainServerID]["MixServerIDList"], intval($serverInfo["ServerID"]));
        }
 
        if ($isSpecialUser) {
            if ($specialMainServerID) {
                // 特殊服只显示这两个服
                $mixServerArray[$specialMainServerID] = array("MixServerIDList" => array($specialMainServerID, $specialServerID), "MixServerStr" => "");
            }
        }
 
        # 翻译合服字符串信息
        foreach ($mixServerArray as $mainServerID => $mixServerInfo) {
            sort($mixServerInfo["MixServerIDList"]);
            $mixServerIDList = $mixServerInfo["MixServerIDList"];
 
            $mixServerStr = "";
            $serverCount = count($mixServerIDList);
            if ($serverCount <= 1) {
                continue;
            }
            for ($i = 0; $i < $serverCount; $i++) {
                $serverID = $mixServerIDList[$i];
 
                if ($i == 0) {
                    $mixServerStr = "" . $serverID;
                    continue;
                }
 
                $connectPre = ($serverID == ($mixServerIDList[$i - 1] + 1)); # 连接上一个ID
                $connectNext = false; # 连接下一个ID
                if ($i !=  $serverCount - 1) {
                    $connectNext = ($serverID == ($mixServerIDList[$i + 1] - 1));
                }
 
                if ($connectPre && $connectNext) {
                    continue;
                } else if ($connectPre) {
                    $mixServerStr .= "~" . $serverID;
                } else {
                    $mixServerStr .= ", " . $serverID;
                }
            }
 
            $mixServerArray[$mainServerID]["MixServerStr"] = $mixServerStr;
        }
 
        # 更新到每个服务器
        foreach ($this->serversArray as $serverName => $serverInfo) {
            $serverID = $serverInfo["ServerID"];
            $mainServerID = $serverInfo["MainServer"];
            $mixServerInfo = null;
            if (array_key_exists($serverID, $mixServerArray)) {
                $mixServerInfo = $mixServerArray[$serverID];
            } else if (array_key_exists($mainServerID, $mixServerArray)) {
                $mixServerInfo = $mixServerArray[$mainServerID];
            } else {
                continue;
            }
            $this->serversArray[$serverName]["MixServerIDList"] = $mixServerInfo["MixServerIDList"];
            $this->serversArray[$serverName]["MixServerStr"] = $mixServerInfo["MixServerStr"];
        }
 
        // 特殊账号,只能看指定服及以上
        if ($isSpecialUser) {
            foreach ($this->serversArray as $key => $info) {
                $serverID = intval($info["ServerID"]);
                if ($serverID < $SpecialServerIDStart && $serverID != $specialMainServerID) {
                    unset($this->serversArray[$key]);
                }
            }
        }
        return $this->serversArray;
    }
 
    //所有权限
    public function GetUserPermissions()
    {
        if (isset($this->permissions)) {
            return $this->permissions;
        }
        $this->permissions = array();
        if ($this->IsAdminSuper()) {
            $PermissionModules = \User\GetPermissionModules();
            foreach ($PermissionModules as $moduleInfo) {
                $this->permissions = array_merge($this->permissions, array_keys($moduleInfo["PList"]));
            }
            array_push($this->permissions, Permission::P_System); // 超级管理员附加系统权限
        } else if ($this->IsAdminOrg()) {
            \DBOper\FindOne("GMTPermissionGroup", array(
                "Organization" => $this->userData["Organization"],
                "GroupName" => Permission::GroupAdmin
            ), $adminPerInfo);
            if (isset($adminPerInfo) && is_array($adminPerInfo['Permissions'])) {
                $this->permissions = $adminPerInfo['Permissions'];
            }
        } else {
            $groupDatas = null;
            $PermissionGroups = $this->userData["PermissionGroups"];
            if (isset($PermissionGroups) && count($PermissionGroups) > 0) {
                \DBOper\Find("GMTPermissionGroup", array(
                    "Organization" => $this->userData["Organization"],
                    "GroupName" => array('$in' => $PermissionGroups)
                ), $groupDatas);
            }
            if (isset($groupDatas)) {
                foreach ($groupDatas as $gData) {
                    if (is_array($gData['Permissions'])) {
                        $this->permissions = array_merge($this->permissions, $gData['Permissions']);
                    }
                }
            }
        }
        return $this->permissions;
    }
 
    //是否有该权限
    public function HavePermission($permission, $notice = true)
    {
        if (!in_array($permission, $this->GetUserPermissions())) {
            if ($notice) {
                if (!$permission) {
                    \Logging\LogError("没有指定权限");
                    echo \Lang\gettext("没有指定权限");
                } else {
                    \Logging\LogError("您没有该权限." . $permission);
                    echo \Lang\gettext("您没有该权限");
                }
            }
            return false;
        }
        return true;
    }
 
    //是否需要验证权限key
    public function NeedCheckKey()
    {
        \CommFunc\GetConfig("Config", "CheckKeyTime", $checkKeyTime);
        if ($checkKeyTime == "") {
            return true;
        }
        if (!$checkKeyTime) {
            // 不需要验证
            return false;
        }
        $checkKeyTime = (int)$checkKeyTime;
        $curTime = time();
        $lastcheckKeyTime = $_SESSION['checkKeyTime'];
        if ($lastcheckKeyTime && $curTime - $lastcheckKeyTime < $checkKeyTime) {
            return false;
        }
        return true;
    }
 
    //更新验证权限key时间
    public function UpdCheckKeyTime()
    {
        $_SESSION['checkKeyTime'] = time();
        return $_SESSION['checkKeyTime'];
    }
 
    public function GetErrInfo()
    {
        return $this->m_sErrInfo;
    }
}