misuzu/src/SharpChat/SharpChatPerms.php

57 lines
2.4 KiB
PHP

<?php
namespace Misuzu\SharpChat;
use Misuzu\Perm;
use Misuzu\Perms\Permissions;
use Misuzu\Users\UserInfo;
final class SharpChatPerms {
private const P_KICK_USER = 0x00000001;
private const P_BAN_USER = 0x00000002;
//private const P_SILENCE_USER = 0x00000004;
private const P_BROADCAST = 0x00000008;
private const P_SET_OWN_NICK = 0x00000010;
private const P_SET_OTHER_NICK = 0x00000020;
private const P_CREATE_CHANNEL = 0x00000040;
private const P_DELETE_CHANNEL = 0x00010000;
private const P_SET_CHAN_PERMA = 0x00000080;
private const P_SET_CHAN_PASS = 0x00000100;
private const P_SET_CHAN_HIER = 0x00000200;
private const P_JOIN_ANY_CHAN = 0x00020000;
private const P_SEND_MESSAGE = 0x00000400;
private const P_DELETE_OWN_MSG = 0x00000800;
private const P_DELETE_ANY_MSG = 0x00001000;
private const P_EDIT_OWN_MSG = 0x00002000;
private const P_EDIT_ANY_MSG = 0x00004000;
private const P_VIEW_IP_ADDR = 0x00008000;
private const PERMS_DEFAULT = self::P_SEND_MESSAGE | self::P_DELETE_OWN_MSG | self::P_EDIT_OWN_MSG;
private const PERMS_MANAGE_USERS = self::P_SET_OWN_NICK | self::P_SET_OTHER_NICK | self::P_DELETE_ANY_MSG
| self::P_EDIT_ANY_MSG | self::P_VIEW_IP_ADDR | self::P_BROADCAST;
private const PERMS_CHANGE_BACKG = self::P_SET_OWN_NICK | self::P_CREATE_CHANNEL | self::P_SET_CHAN_PASS;
private const PERMS_MANAGE_FORUM = self::P_CREATE_CHANNEL | self::P_SET_CHAN_PERMA | self::P_SET_CHAN_PASS
| self::P_SET_CHAN_HIER | self::P_DELETE_CHANNEL | self::P_JOIN_ANY_CHAN;
public static function convert(Permissions $perms, UserInfo $userInfo): int {
$perms = $perms->getPermissions(['global', 'user'], $userInfo);
$convert = self::PERMS_DEFAULT;
if($perms->user->check(Perm::U_USERS_MANAGE))
$convert |= self::PERMS_MANAGE_USERS;
if($perms->user->check(Perm::U_WARNINGS_MANAGE))
$convert |= self::P_KICK_USER;
if($perms->user->check(Perm::U_BANS_MANAGE))
$convert |= self::P_BAN_USER;
if($perms->user->check(Perm::U_PROFILE_BACKGROUND_CHANGE))
$convert |= self::PERMS_CHANGE_BACKG;
if($perms->global->check(Perm::G_FORUM_CATEGORIES_MANAGE))
$convert |= self::PERMS_MANAGE_FORUM;
return $convert;
}
}