【一起学Rust | 框架篇 | Tauri2.0框架】高级概念之安全特性的权限与能力

文章目录

  • 前言
  • 一、开发前准备
    • 1. 准备项目
    • 2. 需求分析
      • 1. 监听系统热键
      • 2. 切换窗口无边框
      • 3. 切换窗口全屏
  • 二、安装插件
  • 三、前端实现功能
  • 四、配置权限


前言

当前时间为 2024 年 9 月,距离Tauri 2.0 的 RC 版本发布迄今已近一个月。从 Tauri 官方渠道可以看出,其团队在编写和翻译官方文档方面付出了极大的努力,尤其是在对中文的支持方面表现得尤为突出。

具体表现就是开发文档界面选项基本上都是中文,而且插件栏目基本上都翻译完了。即便如此,仍有诸多内容尚未完成翻译。在母语为中文的开发者群体中,应存在不少英语水平较高之人。然而,当中文仅翻译了一半时,在查阅文档的过程中确实会让人感到颇为别扭。
在这里插入图片描述

在进行 Tauri 开发的过程中,倘若开发者并非能够将所有内容都自行编写一遍的资深专业人士,那么 Tauri 的安全部分必然会被涉及。这是因为 Tauri 的插件系统配置了相应权限。Tauri 支持众多功能,然而,若不进行配置以允许使用这些功能,即便复制官方文档中的代码也无法达到相同的效果。这是由于在默认情况下,许多功能需要手动开启。例如,若期望实现代码关闭应用程序、执行 shell 命令、注册热键等操作,若不配置开启这些功能,则无法正常使用。

现在的tauri都是插件化开发的,插件中又带有很多的命令,而tauri对这些命令有着严格的限制。

权限(Permissons)是对于插件而言的,用来描述插件中命令的权限,它可以使命令在 Tauri 应用程序的前端可访问。它可以将作用域映射到命令并定义哪些命令是启用的。权限可以启用或拒绝某些命令、定义作用域或两者结合。你可以对权限进行分组(但是一定要注意命名要规范)。如果你是开发应用程序,你们你可以通过他们拓展自己的命令(当然也要配置权限)。

能力(Capabilities)是tauri或插件所提供的,是对于应用开发者而言的,功能是一组权限,通过各自的标签映射到应用程序窗口和 web 视图。功能可以影响多个窗口和 web 视图,并且可以在多个功能中被引用。通过配置能力,可以逐步启用tauri或插件的一些功能,而功能是权限的组合,二者密不可分。

这套体系在主要作用是约束前端行为,如果你是在后端写rust来调用一些API是不需要这么多弯弯绕绕的。

官方用下面这张图来描述运行时权限的执行流程。当一个窗口通过invoke来调用后端的command时需要先经过IPC处理器,这时候会检查当前窗口是否有相应的能力,有对应的命令的权限就传回后端执行命令,否则就拒绝调用,这就是为什么原封不动的代码复制过去就是无法使用的原因。

在这里插入图片描述
以上大多是官方文档的转述,纯属理解概念。但是只理解概念是不够的,学习+动手才能更好的将知识掌握,接下来我将通过实现一个按下F11切换无边框全屏的功能来演示这部分内容如何使用。


一、开发前准备

1. 准备项目

首先要准备一个能用的项目,如果你已经有了,可以直接新建个分支测试一下,或者新建个tauri2.0的项目也是可以的。比如新建项目

# 注意:一定要用这个创建,是最新版的,旧版的tauri是用不了的
pnpm create tauri-app --rc

运行以后

  • 选择您的前端语言:TypeScript / JavaScript
  • 选择您的包管理器:pnpm
  • 选择您的UI模板:Angular(你自己看,我是这么选的,可以不一样,你擅长就好)

然后安装依赖即可

cd tauri-app
pnpm install
pnpm tauri dev

2. 需求分析

首先要明确实现的功能是什么,我们本次要实现的功能是实现《按下F11切换无边框全屏功能》,分析这句话就知道,要想实现这个功能

  1. 首先要能够检测按下了什么键,才能实现后面的功能
  2. 然后是要能切换窗口的风格未无边框
  3. 最后是能够实现窗口全屏

拆分好3个功能点后,就可以寻找tauri中对应功能的实现了。tauri2.0提供了丰富的插件,可以实现各种功能,于是可以先在插件里面找,

1. 监听系统热键

监听系统热键可以实现检测按下了什么键,如果你使用rust很熟练,可以试试使用纯rust来实现,本期内容主要是权限和能力,因此只考虑插件实现。

tauri中有个插件global-shortcut(全局快捷方式),其实就是快捷键,翻译问题,如果你看官方文档就会看到这个插件是检测是否按下了某个键,然后执行某段代码。

import { register } from '@tauri-apps/plugin-global-shortcut';await register('CommandOrControl+Shift+C', () => {console.log('Shortcut triggered');
});

当然也有rust版本,但是如果你用rust版本就不需要配置能力了。

2. 切换窗口无边框

要想要修改窗口风格,tauri提供了3种方式

  1. 通过 tauri.conf.json
  2. 通过 JavaScript API
  3. 通过 Rust 的 Window

1和3是本次不会使用的,1是因为如果需要一开始就确定窗口风格,那么可以在这修改;3是因为rust不需要权限,因此也不会使用。

在window的api文档下有如下描述
在这里插入图片描述
可以看到获取了window之后可以调用setDecorations()开指定是否需要边框。

3. 切换窗口全屏

这个同2,可以直接用ts的api来做。
在这里插入图片描述

二、安装插件

经过上一部分,我们已经知道需要安装一个插件global-shortcut,其余都用tauri来实现,tauri安装插件很方便,只需要执行以下命令就会自动安装好插件,并且注册配置到当前的tauri项目。

pnpm tauri add global-shortcut
pnpm install

三、前端实现功能

打开src/app/app.component.ts,然后写个构造方法,在程序一运行的时候就执行注册按键事件。

  constructor(){register("f11", (event) => {if (event.state === "Released") {console.log("F11 pressed")}})}

接下来定义一个bool变量,来判断当前是否是全屏,按下f11以后修改其值

private isFullscreen = signal(false);constructor(){register("f11", (event) => {if (event.state === "Released") {console.log("F11 pressed")this.isFullscreen.set(!this.isFullscreen())}})}

最后在根据状态来设置窗口状态,这样就完成了

  private isFullscreen = signal(false);constructor(){register("f11", (event) => {if (event.state === "Released") {console.log("F11 pressed")this.isFullscreen.set(!this.isFullscreen())const window = getCurrentWindow()window.setFullscreen(this.isFullscreen())window.setDecorations(!this.isFullscreen())}})}

四、配置权限

在经过以上修改后直接运行会发现快捷键没有起作用,这时候就需要配置权限了。在安装好插件后就会发现有了src-tauri/capabilities/desktop.json文件,这个文件来定义窗口可以使用的能力。文件内容如下

{"$schema": "../../src-tauri/gen/schemas/desktop-schema.json","identifier": "desktop-capability","platforms": ["macOS","windows","linux"],"windows": ["main"],"permissions": ["global-shortcut:default" // 启用的权限]
}

其中能力标识需要复制一下,打开tauri.conf.json,在app>security下添加

"security": {"csp": null,"capabilities": ["desktop-capability"] // 添加这行,标识启用能力}

然后就可以在src-tauri/capabilities/desktop.json配置能力了

{"$schema": "../../src-tauri/gen/schemas/desktop-schema.json","identifier": "desktop-capability","platforms": ["macOS","windows","linux"],"windows": ["main"],"permissions": ["global-shortcut:allow-is-registered",// 允许检查是否注册了热键"global-shortcut:allow-register", // 允许注册热键"global-shortcut:allow-unregister", // 允许反注册热键"core:window:allow-get-all-windows", // 允许获取所有窗口"core:window:allow-set-decorations", // 允许设置窗口风格"core:window:allow-set-fullscreen" // 允许设置窗口全屏]
}

经过以上修改,程序就可以得到我们想要的结果了。

本期代码已经放到我的gitcode,如果你感兴趣可以下载来看看,对比差异学习。

git仓库地址: https://gitcode.com/weixin_47754149/tauri-example-project.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/446867.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CVESearch部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.1.1、下载安装基础组件2.1.1.2、下载安装MongoDB Community Edition 7.0 2.1.2、使用源码安装系统2.1.2.1、安装CVESearch2.1.2.2、填充MongoDB数据库2.1.2.3、填充Redis数据库 2.2、使用方法 3、测…

使用java画一条线。

package p1008;import javax.swing.*; import java.awt.*;public class LineAndTextExample extends JPanel {Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 设置线条粗细Graphics2D g2d (Graphics2D) g;g2d.setStroke(new BasicStroke(5))…

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(基础)

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(基础) 简介适用场景Quartz核心概念Quartz 存储方式Quartz 版本类型引入相关依赖开始集成方式一:内存方式(MEMORY)存储实现定时任务1. 定义任务类2. 定…

Broken pipe异常分析及处理

问题出现:生产上运行的系统业务正常,当在查询数据时,出现后台异常,检查后台日志出现Broken Pipe异常; 如图示: Broken Pipe定义:通常发生在服务器端尝试向已关闭的套接字(客户端/端…

前端面试经验总结1(简历篇)

本文分为3部分,分别为第一部分简历篇,第二部分经典问题篇以及第三部分知识体系篇,都是个人面试经验及同行面试经验总结和整理。 我对于简历的理解是这样的,简历的作用是让看简历的人能够快速、准确地捕捉到有用信息: 你…

大数据存储,搜索智能化的实践分享 | OceanBase 城市交流会精彩回顾

9月21日,“OceanBase 城市交流会”来到了深圳,携手货拉拉大数据技术与产品部,联合举办了“走进货拉拉”的技术交流活动。货拉拉、万家数科、云集、百丽等多家企业的一线技术专家,就大数据存储、AI等热点话题,深入探讨并…

新的一轮前端面试已来临,避坑指南来 get!

最近看到很多人都在投简历,可是很多人对待面试不够认真,只会等待结果,不去努力。所以整理一些懒人面试技巧给大家。 我们说说目前应用面积最广的 Vue,大厂或是高级工程师面试的时候究竟会碰到什么棘手或是难缠的 Vue 的面试题呢&a…

人工智能 | openai chatgpt 大语言模型

简介 OpenAI 一个美国人工智能研究实验室,由非营利组织 OpenAI Inc,和其营利组织子公司 OpenAI LP 所组成。该组织于 2015 年由萨姆阿尔特曼、里德霍夫曼、杰西卡利文斯顿、伊隆马斯克、伊尔亚苏茨克维、沃伊切赫萨伦巴、彼得泰尔等人在旧金山成立&…

高效数据处理:MapReduce与Hive的实战应用

文章目录 hive分析汇总互联网日志分析1.项目需求2.数据说明3.算法思路 用户电影推荐1.项目需求2.数据说明3.算法思路4.解题步骤 简单数据统计WordCount数据说明 疫情数据分析1.项目需求2.数据说明step1:创建ods层数据表step2:创建dwd层数据表step3:创建d…

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块,在pycharm中跳转webdriver模块的__init__.py文件,内容如图所示:从selenium包的子目录中导入了很多模块并做了重命名,用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…

Codigger Keyboard Look应用说明

Keyboard Look是一项专为Desktop设计的功能模式,旨在通过全面启用键盘操作,减少对鼠标依赖,从而提升用户的工作效率和操作体验。尤其对于频繁使用键盘的用户,如开发者,此模式可显著加速日常操作,优化工作流…

连肝了多天学习MySQL索引与性能优化,详细总结一下索引的使用与数据库优化

文章目录 索引是什么?索引的作用初步认识索引索引的类型按照数据结构分类BTREE索引 哈希索引 按功能逻辑进行分类唯一索引普通索引主键索引全文索引 按照字段的个数进行划分单列索引多列(组合,联合)索引 小结索引的设计原则数据准…

Centos7 搭建单机elasticsearch

以下是在 CentOS 7 上安装 Elasticsearch 7.17.7 的完整步骤:(数据默认保存在/var/lib/elasticsearch下,自行更改) 一、装 Java 环境 Elasticsearch 是用 Java 编写的,所以需要先安装 Java 运行环境。 检查系统中是…

gbase8s之建表相关问题

第一章..绪论 1.1..背景 需要对明年所有系统的表新建。 1.2..要求 对导切建表可能遇到的一些问题罗列及解决办法。 第二章..新建表的的过程 1.1..获取DDL 获取DDL一定要在服务器上去获取,千万别用gds去导出ddl。 1.1.1..切换数据库用户 su – gbasedbt 1.1…

一键录制电脑画面全攻略!免费的电脑录屏秘籍

屏幕录制,这是个看起来挺简单,实际上作用可大了的工具。它能帮咱们把电脑屏幕上的每个动作都给抓住,不管是弄教程,还是记会议,又或者是分享游戏里的精彩时刻。不过,一键录制真有它听上去那么容易吗&#xf…

1.Label Studio 介绍

Label Studio 介绍 文章目录 Label Studio 介绍前言一、安装介绍二、Run with Docker Compose1、WSL2安装2、Docker Desktop安装3、Label Studio安装(第二种方法 Run with Docker Compose ) 三、Install for local development1.下载源码2.安装poetry3.安…

了解计算机视觉:探索直播平台视频美颜SDK的集成与性能调优

本篇文章。小编将详细探讨计算机视觉在直播中的应用,尤其是如何集成视频美颜SDK并进行性能调优。 一、计算机视觉与视频美颜的基本原理 计算机视觉是人工智能的一个重要分支,旨在让机器能够“看见”并理解图像或视频中的内容。在直播场景中&#xff0c…

ECCV`24 | 新加坡国立华为提出Vista3D: 实现快速且多视角一致的3D生成

文章链接:https://arxiv.org/pdf/2409.12193 gitbub链接:https://github.com/florinshen/Vista3D 亮点直击 提出了Vista3D,一个用于揭示单张图像3D darkside 的框架,能够高效地利用2D先验生成多样的3D物体。开发了一种从高斯投影到…

红外传感器的算法!

一、红外线的基本性质 红外线,又称红外光,是电磁波谱中波长介于可见光和微波之间的部分。它具有反射、折射、散射、干涉和吸收等物理特性,这些特性使得红外线传感器能够实现对物体的非接触式检测。 二、红外传感器的算法原理 热电效应&…

计算机网络:物理层 —— 数据的传输方式

文章目录 传输方式串行传输串行传输方式特点应用 并行传输特点应用 网卡的串/并转换同步传输同步时钟频率的误差问题特点应用 异步传输特点应用 单向通信特点应用 双向交替通信特点应用 双向同时通信特点应用 传输方式 串行传输 串行传输是一种数据传输方式,指的是…