搬运自OpenMod官网,经过翻译,可能有些不足,欢迎指正!原文链接
权限
权限可以定义用户执行哪些操作允许,哪些不允许。
您可以使用IPermissionChecker服务检查用户是否具有特定权限:
// 有关事件侦听器的详细信息,请阅读事件文档
public class UserConnectBroadcaster : IEventListener<UserConnectedEvent>
{
private readonly IPermissionChecker m_PermissionChecker;
private readonly IUserManager m_UserManager;
public UserConnectEventListener(
IPermissionChecker permissionChecker,
IUserManager userManager)
{
m_PermissionChecker = permissionChecker;
m_UserManager = userManager;
}
public async Task HandleEventAsync(object sender, UserConnectedEvent @event)
{
var user = @event.User;
if(await m_PermissionChecker.CheckPermissionAsync(user, "announce.join") == PermissionGrantResult.Grant)
{
await m_UserManager.BroadcastAsync(user.Type, $"{user.DisplayName} has joined.");
}
}
}
让我们仔细看看CheckPermissionAsync。CheckPermissionAsync返回PermissionGrantResult,它包含以下成员的枚举:
Default – 权限既没有明确授予也没有明确拒绝
Grant – 已明确授予该权限
Deny – 权限被明确拒绝
通常要检查结果是否等于PermissionGrantResult.Grant以允许操作。这意味着如果未设置明确权限,则默认情况下将拒绝该操作。如果要执行操作,除非它被明确拒绝,否则改用CheckPermissionAsync(..) != PermissionGrantResult.Deny。
注册您自己的权限
使用自定义权限的插件需要在被检查之前注册,如果在检查它们时没有注册,你将会得到一个异常。
要注册您的权限,您需要使用IPermissionRegistry服务并遵循以下示例:
public class MyPlugin : OpenModUniversalPlugin
{
private readonly IPermissionRegistry m_PermissionRegistry;
public UserConnectEventListener(IPermissionChecker permissionRegistry)
{
m_PermissionRegistry = permissionRegistry;
}
public async Task OnLoadAsync()
{
m_PermissionRegistry.RegisterPermission(this, "example.permission", "This is a example description for my example permission");
return Task.CompletedTask;
}
}
在本例中,我们将权限注册为example.permission但要它将会检查的是MyPlugin:example.permission。
你应该在加载插件时注册你的权限。如果有命令相关的权限,则有更好的方法来注册它们,请检查命令文档。
添加您自己的权限存储
您可以添加自己的权限存储(例如,在MySQL中存储权限):
实现IPermissionStore接口并通过ServiceConfigurator进行注册:
public class ServiceConfigurator : IServiceConfigurator
{
public void ConfigureServices(IOpenModStartupContext openModStartupContext, IServiceCollection serviceCollection)
{
serviceCollection.Configure<PermissionCheckerOptions>(options =>
{
options.AddPermissionSource<YourPermissionStore>();
});
}
}
覆盖权限检查
有时你可能想检查一下自己是否有成员的许可。
实现IPermissionCheckSource通过ServiceConfigurator注册它:
public class ServiceConfigurator : IServiceConfigurator
{
public void ConfigureServices(IOpenModStartupContext openModStartupContext, IServiceCollection serviceCollection)
{
serviceCollection.Configure<PermissionCheckerOptions>(options =>
{
options.AddPermissionCheckSource<YourPermissionCheckSource>();
});
}
}
以下示例将向Unturned的管理员授予所有权限:
public class UnturnedAdminPermissionCheckProvider : IPermissionCheckProvider
{
public bool SupportsActor(IPermissionActor actor)
{
/* 仅适用于Unturned的管理员 */
return actor is UnturnedUser user && user.SteamPlayer.isAdmin;
}
public Task<PermissionGrantResult> CheckPermissionAsync(IPermissionActor actor, string permission)
{
/* 允许任何权限 */
return Task.FromResult(PermissionGrantResult.Grant);
}
}
游戏交流区
攻略区
问答区
Mod发布区
Mod地图发布区
Mod技术区
汉化区
角色扮演交流区
技术交流
开服教程区
服务器宣传区
游戏更新公告区
MiaBot框架
圆心云开服面板
话题中心
社区公告
认证申请
工具/软件区
RGB颜色对照表
签到中心
幸运抽奖
排行榜
友情链接
小黑屋
周边商城


