已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
eyeos 2开发手册翻译:zenoleo qq群:10899268翻译得不好,大家见谅。发现错误可以通过qq联系我。目录0.许可证21.简介21.1.什么是eyeos?31.2.应用系统32.操作32.1.系统结构42.2.数据库和用户的个人文件夹53.开发环境54.组件64.1.内核64.2.服务64.3.库64.4.框架74.5.引导程序76. mmap exec的和extern96.1。mmap106.2.exec的107.structure和功能的应用程序118.creating我们的第一个应用程序149.qooxdoo189.1.eyeos使用qooxdoo类1811.usermanager1912.procmanager2013.文件系统接口2116.conversion的office文档2717.dbus2718.netsync real time2819.database连接3019.1。泛型dao3019.2。直接连接3320.references和进一步阅读330.许可证.本文件的内容正在出版的“创作共用许可证: -非商业性-署名-相同方式共享3.0声明页面 您可以查看许可协议的条款摘要. 1您可以在下面的地址.查看全文本 许可证2 您可以自由:要共享 -复制,分发和传输工作。混合 -适应的工作。在下列情况下:署名 -您必须归因于作者或授权人(但不以任何方式表明他们赞同你或你的工作使用)指定的方式工作。非商业 -您可能无法使用本作品用于商业目的。相同方式共享 -如果您改变,转换,或建立这项工作时,您可以分发的工作,只有在这个相同或类似的 许可证。1.简介本文件的目的是提供必要的在eyeos环境下开发的知识;,能够构建应用程序,修改现有的应用程序,开发一般的系统组件,并了解其架构。 本文档的读者是技术人员,例如,分析师和web开发人员。javascript和php的知识是必需的,以及web开发的整体理解。了解面向对象编程也将是有帮助的。 1.1.什么是eyeos?eyeos是一个在线桌面,为用户提供了类似桌面的界面,类似于计算机上的界面。eyeos对于开发人员提供了一套工具,允许您开发在线桌面应用程序,通过类似在本地桌面上的方式。在eyeos的应用程序的开发使用javascript的图形库,允许开发人员在更高层的概念工作,例如窗口,按钮,列表等,而不是层或低级别的xhtml。eyeos的目标同时包括用户和开发人员,应用程序的工作方式类似于本地桌面应用,隐藏在web环境中工作所产生的问题。eyeos是为这些人:希望他们的用户在一个可控制的方式通过web界面访问资源,访问控制和用户帐户,有适应环境的能力,以符合他们的公司或组织的形象,并创造所有新特性和功能,以满足他们的需求。1.2.应用系统由于能够开发出具有绝对的确定性,另一个应用程序不干扰你的应用程序高度重视,我们已经制定eyeos是整个应用系统的发展是尽可能简单。在一定意义上eyeos是像一个传统的操作系统,其中每个应用程序单独运行它自己的进程和其自身的进程id(pid),其中每个应用程序可以有不同的执行权限。因此,一个应用程序在eyeos是一个独立的组件,您可以安装或卸载,就像任何windows或linux应用程序。您也可以定义安全规则的设置,以便只有一个用户或用户组可以看到,安装和使用桌面上的应用程序。后面我们将会看到,该系统提供一个api来管理应用程序,用户运行的是,例如,关闭正在运行的应用程序,或运行新的应用。这是该系统能够运行,而不相互干扰,每个应用程序和运行相同的应用程序的多个实例,通过这个api。eyeos系统处理低级别的操作,例如,当用户关闭一个应用程序的过程中被自动删除。开发商不担心这些细节,但如果需要的话,可以介入和整个系统的改变默认的行为和行动。2.操作从技术上讲,eyeos是用php和javascript开发web应用程序。php用来开发服务器端的架构,而javascript用于创建和管理桌面和应用程序,显示在web浏览器客户端。所有的eyeos的应用,如登录,注册,或计算器,是一个javascript和php脚本的集合。甚至桌面本身是一个eyeos的应用程序,可以修改。当第一次加载系统,用户的web浏览器下载所有必要的javascript库,然后开始使用ajax与服务器通信。这样,在整个用户会话中只有一个页面加载,其余的操作都是通过ajax请求。在第一次加载时,eyeos系统运行所需要的javascript库被下载。当应用程序第一次运行,具体到每个应用程序的javascript文件下载需求。下一次运行应用程序,系统将使用已经在缓存中的javascript。当用户在eyeos运行一个应用程序,一个可视化窗口通常会出现,使用户能与它进行交互。窗口创建一个高层次的javascript库qooxdoo;这很像是gtk、qt、java swing,或类似的用户界面开发工具包。当用户界面要求javascript在服务器上执行一个操作,通信库用于发送消息(这是低层次的ajax请求)给应用程序的创建者所定义的php函数。通过本文,eyeos如何工作将逐渐变得更清晰,这将给你一个非常有用的系统的概述。应用程序运行在与其他应用程序隔离的环境中。因为它执行的任何处理都必须通过操作系统,所以系统可以保证安全性。在任何情况下,开发人员能够从系统访问资源或信息(指图片、css等),而无需使用系统的api(因为没有人会检查权限或操作安全)。2.1.系统结构在eyeos,组件和系统功能通过javascript和php划分。有一些javascript端的功能,简化应用开发,包括了必须使用的应用程序的特定结构。同样,在php运行的服务器端,也有库和api。 正如你可以看到,应用程序分为两部分的部分,在客户端(浏览器)上运行和在web服务器上运行的部分。客户端上运行的部分,通过javascript描绘用户界面。当你需要做一些操作,例如读取数据库,你可以通过api调用一个服务器端的php函数。 2.2.数据库和用户的个人文件夹 在eyeos所有组件都是模块化的,就是说eyeos系统包含一系列的组件,如用户管理。组件的内部划分成更小的元件,如公共用户管理api,这个组件处理用户的软件,并管理用户的数据。下一个元件,是负责响应保存数据的请求,接收用户的数据,被称为vider是组件的一小部分,其任务是保存eyeos的数据。这种模块化使我们在编写整个系统时都无需担心在后端的数据库类型。如果我们要使用不同类型的数据库,那么我们可以简单地开发一个新的provider,而无需接触组件或应用程序的其余部分。正因为如此,当有人问你eyeos的用户保存在哪里,实在是没有明确的答案。事实上,一切都取决于所使用的provider。默认是使用mysql数据库,但是我们可以很容易地开发oracle或微软sql server的provider,甚至非关系引擎的provider。eyeos系统内用户的文件存储在服务器的文件系统。稍后,我们将彻底分析eyeos目录结构;现在重要的是,要了解用户的文件没有存储在数据库中。3.开发环境由于eyeos应用在任何文本编辑器和web浏览器的javascript和php,开发不够,开始发展。然而,一个共同的文本编辑器没有语法着色,缩进或代码完成功能。虽然它是可能的发展离不开这一切,它不会是理想的环境。由于eyeos是一个web应用程序,它需要一个web服务器,数据库,和现代的web浏览器运行。一个典型的设置是为开发本地计算机上安装web服务器,使他们不需要上传到外部服务器来测试。在商业环境,这是典型的开发团队内部开发服务器上安装有eyeos,使发展可以以协作的方式进行。eyeos将被安装在web服务器,请阅读eyeos安装手册的要求和建议的软件和如何安装eyeos。至于web浏览器,firefox是建议,因为它是免费的,跨平台,并支持扩展或添加功能到浏览器的插件使用 。它也有很大的尊重和对web标准的快速运行javascript。firefox可以从:/firefox/要添加调试代码,错误报告,以及许多其他功能,真的是有用的web开发firefox的功能,你应该安装firebug扩展: /对于一个代码编辑器中,有很多在互联网上免费提供节目。如notepad+,netbeans,jedit的等,将是足够的。4.组件前面已提到,有php api提供给应用程序,事实上也有在php端的组件,这些是: 目录:4.1。内核4.2。服务4.3。库4.4。框架4.5。引导程序4.1.内核eyeos内核是管理的其他组件的组件。由于eyeos是一个web应用程序,内核并不像普通操作系统一样,但内核是核心组件,它管理其他组件的实例化,形成了eyeos的引擎。对于开发者,内核是一种不可见的组件;你不需要直接与它进行交互,所以对它的研究将不会很有趣。4.2.服务服务是系统的组件,是eyeos运行必须的组件,并且管理eyeos内部的功能。例如,一个组件,它负责管理用户,它是一个服务。一个组件,它负责压缩zip文件,它不是一个服务,因为它不是eyeos必须的组件。大多数服务会在后面分别更深入地讨论,例子包括进程管理器或用户管理,因为两者都是eyeos必要的内部组件。所有的服务都有一个公共api,供应用程序访问,使他们能与系统进行交互,例如通过用户服务的公共api创建一个新用户。4.3.库库负责对eyeos系统提供支持和保障。库中的一个例子是为utf8的支持。因为php目前不支持utf8,在eyeos有一个库,添加这种支持。库是使系统工作所必不可少的,但与服务有区别,区别在于他们没有管理eyeos中的任何东西,他们在一个较低的层次,提供支持和保障,确保运行eyeos时,一切都在正确的环境中。4.4.框架框架是系统中的最高层的组件,也就是说,它们更接近应用并进一步远离低层次的细节。框架是不必要的组件,添加eyeos功能,但没有对eyeos自身进行更改。例如用户管理不是一个框架,因为它是一个服务。例如,一个框架,负责转换office文档成为应用程序使用的其他文件格式,另一个例子是解压zip文件的框架。4.5.引导程序在所有操作发生之前,引导程序负责加载整个系统。当用户打开时按需加载应用程序,每次请求,所有的库、服务和框架都加载一次,这样每次用户运行一个程序时,所有组件都已经被加载并且可用。配置文件eyeos /system/ conf /boot.xml中,包含加载项和加载顺序的配置。语法是一系列的元素,像这样. .library exceptions 20 在每个元素有子元素指定组件类型、名称和加载优先级。加载优先级是什么决定了组件的加载顺序。默认情况下所有组件都具有优先级为0,按字母顺序加载。如果你想加载其他组件之前加载一个组件,只要设置其优先级为更大的数(10,20,30等)。 因此,可见,开发者有一系列的层,运行在程序底部,并保护他们远离低层次的细节,如php版本或安装的模块。然后应用程序可以把精力集中在功能和业务逻辑上。 5.目录结构重要的一点是要知道系统的结构,因此,你才能找到配置文件和其他组件。如果你看一下组成eyeos的文件,你会看到,在第一级目录中,我们只有的index.php、settings.php和名为eyeos的一个目录。settings.php是一个配置文件。在其中的定义,是可以改变eyeos行为的常量。例如数据库连接器的配置,以及许多其他的东西。在安装说明书中包含此文件用到的指令。index.php文件与eyeos系统的所有部分相关。每当一个请求发送到eyeos或者运行一个应用程序,或执行任何操作,都要通过这个文件。eyeos目录,被称为“eyeroot”或“root”,包含整个eyeos,包括所有用户的数据。在这个目录里有一个名为htaccess的文件,其中有一条“拒绝所有”的规则,这是使其无法从浏览器访问这个目录。只有通过index.php文件可以访问eyeos目录下的文件。在eyeos目录中有以下的目录树.apps/extern/extras/system/tests/users/workgroups/apps/在apps目录里包含在eyeos桌面上运行的应用程序或桌面本身。每个应用程序都有自己单独的目录,例如计算器应用程序在eyeos/apps/calculator目录里。extern/因为只有index.php文件是可以从外部访问,eyeos必须有一些方法,使javascript文件,css,图片等,可用于浏览器,以便浏览器可以加载它们。这是extern目录存在的目的。需要通过浏览器访问的所有资源必须放置在extern目录,或其子文件夹内。当index.php文件收到这样的请求“index.php?extern=some_image.jpg”,extern目录下的some_image.jpg文件的内容被返回给浏览器,以便它可以被加载。这将在以后更深入地讨论。extras/在此目录中,包括需要安装或配置eyeos的所有脚本和文件,但不是eyeos运行所需的文件。例如首次创建数据库的sql文件。之后,他们没有在任何地方使用。system/system目录包含所有的系统组件,这是前面讨论过的。在system目录中,有frameworks目录,其中存放着框架,bootstrap目录包含引导程序,conf目录包含一般的系统配置,管理员可以修改,kernel目录存放着库和服务。tests/test目录包含系统的单元测试,也许不受应用程序开发人员所喜爱。users/在users目录中为每个用户建立了一个子目录。这个子目录包含用户的文档和设置文件。例如,joeybloggs用户的目录是eyeos/users/joeybloggs。workgroups/workgroups目录包含用户的工作组。如果用户创建了一个名为“mygroup”的组,这个组的目录为eyeos/workgroups/mygroup。6.mmap,exec和extern在开始开发应用程序之前,有三个与eyeos内部运行相关的概念必须了解,因此,他们有专有的一章来介绍。mmap是一个服务,extern是一个服务,exec是一个javascript函数。6.1.mmap正如我们在第5章中看到,所有对eyeos的请求必须通过index.php文件传递。这意味着,index.php文件根据请求的类型执行一个动作。您可以发送get或post变量到index.php。mmap是系统服务,负责识别请求的类型、决定执行组件或调用其他eyeos服务。mmap与一个插件系统协同工作,对每个mmap可管理的请求类型,mmap都有一个相应的插件。当一个请求发送到index.php,index.php文件调用mmap,然后mmap从所有插件中找出一个能够处理该请求的插件。例如,有一个插件,如果请求没有任何get参数,即用户访问没有任何参数被传递到index.php,那么该插件显示登录窗口。还有另外一个插件,如果参数extern存在,那么它会读取指定文件的内容,并返回到浏览器。eyeos里还有其他类型的请求,例如,当你想运行应用程序,一个请求将发送到index.php,该请求传递要执行的应用程序的名称,checknum(当前运行的进程的id pid),和任何其他参数。完整的url将类似于下面这样. /index.php?getapplication=calculator&checknum=570515413&args=nullmmap运行应用程序,并收集其他类型的消息,例如,当一个应用程序的javascript要与应用程序的php通过ajax沟通,以执行动作,如读取数据库(将有一个消息被mmap收集到)。这些请求大多是不可见的,开发人员构建应用程序并不需要了解他们。然而,了解所有到index.php的请求,和mmap决定对每个请求做什么(是有益的)。6.2.execexec是一个在javascript中通过eyeos对象调用的函数。javascript中的eyeos对象是应用程序用来访问基本系统功能的对象,例如运行应用程序。在javascript中,应用程序可以在任何时候调用exec函数,如下:eyeos.execute(myapplication, checknum, args); 第一个参数是要执行的应用程序的名称,第二个参数是当前应用程序进程的标识符,第三个参数是应用程序执行时必须得到的参数。请注意args可指定为null,或可以从函数调用中省略。请求到达index.php文件,并将它传递给mmap,然后找到可以管理应用程序执行的插件。运行应用程序的插件在用户的进程表中插入一个新的进程,读取应用程序的javascript内容,并返回到浏览器。然后运行该应用程序并在eyeos桌面上显示。7. 应用程序的结构和功能到目前为止,我们已经知道系统的工作原理和应用程序分为两个部分,一部分是javascript文件,创建了用户界面,另一部分是php文件,包含任何所需的服务器端处理。如数据库访问。应用程序存放在eyeos/apps/目录下。目录应该具有和应用程序相同的名字,例如:notepad应用程序应放在eyeos/apps/notepad目录下。在这个目录中至少有两个文件,分别是notepad.js和notepad.php。就像你想的那样,notepad.js文件里存放的javascript代码用来创建用户界面,notepad.php包含业务逻辑,php文件内是可以被javascript文件调用的函数,这些函数通过eyeos的api用ajax调用。当调用php函数时javascript有传递参数的能力,该功能由系统提供。如果php函数返回数据,数据会返回到发起请求的javascript中去。所有的这些都是通过callmessage功能函数实现,是eyeos对象的一部分。其语法为:eyeos.callmessage(checknum, funtionname, args, function(e) alert(e););其中第一个参数是当前的应用程序的checknum,函数的名称是根据php文件中的函数所命名的,args是要发送到该函数的参数,最后,我们定义了一个函数,在调用结束时执行 - 该函数称为回调函数。在上述例子中的回调函数只是简单地提示从php函数返回的值。 组成应用程序的javascript和php文件(在我们的案例中是notepad.php和notepad.js),必须有一个让应用程序工作的具体结构。对于notepad.js所需的最低限度的代码如下. function notepad_application(checknum, pid, args) var app = new eyeos.application.notepad(checknum, pid, args); app.drawgui(); qx.class.define(eyeos.application.notepad, extend: eyeos.system.eyeapplication, construct: function(checknum, pid, args) arguments.callee.base.call(this, notepad, checknum, pid); , members: drawgui: function() / code to create the gui is here. ;第一个代码块定义了一个名为notepad_application的函数,这个函数是应用程序的入口,在程序运行时被调用。下面定义的那个类代表该应用程序,他是eyeos的一个应用程序,它继承自eyeos.system.eyeapplication。notepad_application函数定义和执行了drawgui方法。drawgui用其中的代码来创建应用程序的图形用户界面(gui)。php文件中最少的代码是.在这里,我们定义一个抽象类(它不能被实例化)称为notepadapplication,他继承了eyeosapplicationexecutable。在execmodules一章,你会知道,应用程序可以从这个类扩展。如果您想添加一个函数到php文件中且javascript可以调用它,将关键字“public”和“static”放在函数名前面。该函数必须放置在类定义中,如下.现在“myfunction”是可以使用的函数名,可以在您的应用程序的javascript端通过callmessage调用,如同前面看到的那样。需要注意的是,在应用程序目录中没有提及的info.xml文件,在原来的开发手册中有说明。这是用来指定应用程序的名称,图标,描述,作者,和其他应用程序的元数据。8.创建第一个应用程序实践可以解释一切,我们将开发一个应用程序,它从服务器显示当前的日期和时间,当按下“get server time”按钮时。1.在apps目录下创建一个名为servertime的目录。2.在servertime目录下创建一个名为servertime.js的javascript文件3.在这个文件中放入下面的代码. / create main function. function servertime_application(checknum, pid, args) var app = new eyeos.application.servertime(checknum, pid, args); app.drawgui(); / define class for this application. qx.class.define(eyeos.application.servertime, extend: eyeos.system.eyeapplication, construct: function(checknum, pid, args) arguments.callee.base.call(this, servertime, checknum, pid); , members: drawgui: function() / create the window. var mainwindow = new eyeos.ui.window(this, tr(server time); / set the layout manager the window is to use to vertical box. mainwindow.setlayout(new qx.ui.layout.vbox(); / create label to display the time and add it to the main window. var timelabel = new qx.ui.basic.label(press the button below to see the server time.); mainwindow.add(timelabel); / create button to call the php function to get the time. var abutton = new qx.ui.form.button(get server time); / add listener to do something when the button is clicked. abutton.addlistener(click, function() eyeos.callmessage(this.getchecknum(), gettimefromserver, null, function(thetime) timelabel.setvalue(the time is : + thetime); , this); , this); / add the button to the main window. mainwindow.add(abutton); / set min width and height of the window to stop it being too small. mainwindow.setminwidth(300); mainwindow.setminheight(150); mainwindow.setallowmaximize(false); / remember to open the window, otherwise nothing will show on the screen. mainwindow.open(); );4.创建一个名为servertime.php的文件5.在这个文件中放入下面的代码. . 在eyeos桌面上运行应用程序,您需要沿着屏幕上方找到“application”菜单/选项卡,然后选择“添加应用程序”,并点击列表中servertime下面的绿色加号(+)按钮。添加后你可以通过点击它运行该程序。所以,像前面的章节中说明的那样,程序是由两个文件组成,servertime.js和servertime.php。在javascript文件中的代码用来创建用户界面,并包含一个事件监听器在按钮被点击时做一些事情。php文件包含的代码从服务器获取日期和时间。在javascript文件中的事件监听器使用callmessage的api来调用php文件的gettimefromserver函数并获取返回值。这样做使用ajax,没有页面刷新。在javascript中使用qooxdoo(简称“qx”)的图形库。qooxdoo允许你开发一个gui,通过使用javascript,而不是xhtml和css。在qooxdoo里,您通过窗口工作,按钮和其他元素被添加到窗口。9.qooxdoo正如我们在前面的章节中看到的,qooxdoo是一个图形库,用来创建用户界面,如同你使用qt,gtk,或swing库。qooxdoo独立于eyeos,是一个自由软件项目,它的网站是 /eyeos已经包括qooxdoo,因此开发人员不必下载或添加任何东西。eyeos上的所有应用程序都是用qx图形库开发的。阅读教程或qooxdoo api文档是至关重要的,这使你能理解并使用qx库进行开发。qooxdoo是完全面向对象,并允许您定义类,做继承,和做所有典型的面向对象的事情。api和其他文件可以在这里找到/documentation9.1.eyeos中使用的qooxdoo类虽然eyeos大多采用标准qooxdoo类,例如用qx.ui.button画一个按钮,也有一些eyeos扩展qooxdoo类的特殊情况,创建我们自己的附加功能。例如eyeos.ui.window类是qx.ui.window的扩展。问题是,作为一个应用程序开发人员,你会使用mywindow = new qx.ui.window()获取一个窗口,但需要插入某个地方,因为qooxdoo架构中,所有要显示的部件(widgets)必须插入上层部件中。但是,桌面上的窗口的上级是什么部件?事实上,这确实有点复杂。为了让开发人员不必担心这一点,我们创建eyeos.ui.window,实例化并调用open方法时,窗口会自动插入到桌面上显示,而开发人员无需知道谁是该窗口的上级部件。目前,开发者做正常的应用程序时,无需担心比创建eyeos.ui.window更多的情况,因为剩余的扩展类用于eyeos内部。10.应用程序模块(execmodules)我们已经看到了,您可以在php应用程序中添加静态公共方法,从javascript由callmessage调用。不过,所有的应用都有很多方法,例如,php中应该有一个“关闭”函数用来关闭应用程序。当你开发一个全新的应用程序时,每次都重新写这个函数将是一件痛苦的事,这就是为什么应用已经有一些这样的函数定义在php父类eyeosapplicationexecutable。这些函数都可以使用callmessage的javascript调用,就像由开发人员定义的任何其他函数。这意味着,应用程序现在已经有一些可以执行的php函数,虽然开发者没有在php应用程序中定义任何东西。在eyeos的默认函数位于 eyeos/system/frameworks/applications/executables/eyeosmoduies/例如,如果您打开eyeos/system/frameworks/applications/executables/eyeosmodules/contactsexecmodule.php,在里面你会发现一系列的功能,可在你的应用程序中通过callmessage执行。例如:public static function getallcontacts($params)如果你想在你的程序中通过javascript运行它,你需要写如下代码. eyeos.callmessage(checknum, _contacts_getallcontacts, params, function();callmessage只是像正常的,但通过php函数的名称来运行,因为它在contactsexecmodule里,你必须在函数名前的加入包的名称。包的名称必须有两个下划线在它的前面和一个在它的后面(即_contacts_)。许多应用程序使用这些功能,以避免重复完全相同的代码。11.用户管理用户管理(um)是一种服务,允许eyeos用户服务与eyeos应用进行交互。它的一些功能包括创建新用户,列出所有用户,删除用户等。像其他eyeos服务一样,所有调用都要检查运行操作的用户的权限,例如,通过调用um,一个非管理员用户无法创建新用户或删除现有的用户。在一个php的例子里,我们可以使用um查看用户是否存在. $exists = false; try $myumanager-getuserbyname ($username); $exists = true; catch (eyenosuchuserexception $ e) 如果用户不存在,那么当你调用getuserbyname函数时它会导致一个异常,这又导致$exist=true被跳过,最终将返回假。我们也可能使用um去获取系统中的所有用户的列表. $users = ummanager:getinstance()-getallusers();用户被填充到$users数组,数组中的每个对象代表系统中的一个用户,例如获得的第一个用户的用户名,你可以这样做. $username = $users0-getname();12.进程管理进程管理是eyeos的服务,提供了一个api给应用程序,使他们能够运行应用程序,列出的进程,关闭进程等,用户可以只列出了属于他们的会话进程,而不包括另一用户的会话。进程管理器有一个方法来获取当前进程,使应用程序可以调用自己的进程,并操纵它,例如关闭当前进程。与每个进程相关联的用户权限,使用户对每个正在运行的应用程序可以有不同的权限,如同在传统的操作系统上。如果应用程序要得到当前用户是谁,它必须使用用户管理器得到当前进程,然后从那里提取进程的权限和用户,例如. $currentuser = procmanager:getinstance()-getcurrentprocess()-getlogincontext()-geteyeosuser();这样,通过进程管理器,开发者调用当前进程,然后获取logincontext,这是一个对象,含有与这一进程相关联的用户权限。虽然它可能似乎有些牵强,这种工作方式可以让我们在高层操作,如同创建应用程序始终运行在超级用户权限,或以最小的权限。通过进程管理器,应用程序可以获得一个进程列表,例如. $processes = procmanager:getinstance()-getprocessestable();你会得到一个属于用户的所有进程的数组。该数组内的每个对象包含正在运行的进程的信息,例如,你可以获取第一个进程的名字,通过下面代码. $procname = $process0-getname();13.文件系统接口开发应用程序时,有不同的方式来访问文件,通过本地的php函数。大多数开发者采用我们熟知php函数,像 fopen,readfile,file_get_contents.这些功能可能根据php代码运行的环境产生不同的结果。例如,在官方发布的php文档中,有警告说,微软的iis返回一个 ssl:fatal protocol error,并解释说,开发者负责检测并抑制此警告。直接操作文件的问题是,你必须要考虑到环境和操作系统。特别是,如何保证文件的权限等级是一个问题,如只允许有正确权限的eyeos用户访问文件,并允许特定的有读或写权限的用户读或写文件。eyeos开发环境提供了一个抽象层,称为fsi(file system interface),负责替开发者照顾细节问题,包括妥善管理文件,以确保在文件系统上的所有操作都受到安全服务的监督。另一个抽象层,稍后你会看到,它能够管理文件的权限,并决定允许或拒绝特定的操作。fsi为开发者提供了一个api,使开发人员不必处理的安全性和一致性的问题 。它也能够与不同类型的文件协同工作,取决于您的url模式(即ftp:/或http:/)。例如,一个路径像 home:/joeybloggs/images/image.jpg 将会被翻译成 /var/www/eyeos/users/joeybloggs/files/images.jpg 。路径/var/www/eyeos是eyeos安装路径,joeybloggs是eyeos的用户。通过这个系统,fsi能够读写:物理服务器硬盘上的文件,ftp服务器上的文件,在共享文件夹里的文件等,通过不同的协议还可以读写其他文件。fsi的一个主要函数是getfile,该函数的参数是一条路径,在url模式转换和权限检查后,该函数返回一个eyefile类型的对象。例如,如果您要访问一个文件,其路径是home:/joeybloggs/images/image.jpg,其语法是. . $file = fsi:getfile(home:/joeybloggs/images/image.jpg);api的责任是正确翻译url“home/”得到这个文件的实际路径和验证权限,例如,当前用户不是这个文件的所有者,他有读取权限吗?如果该文件存在,并且权限允许,getfile函数返回一个对象供开发者使用。例如,如果你想知道对象$file是否是一个目录,语法. $file-isdirectory(); 要删除一个文件,你可以像下面那样做. $file-delete(true); 总之,fsi是最重要的eyeos服务之一,开发者应该总是通过这个api访问文件,因为该系统处理了所有细节。14.安全管理eyeos的所有组件对数据或系统信息实施操作,或访问资源,都要对当前进程的用户进行权限检查,在任何操作执行之前。被检查的权限依靠一套规则,acl的风格,这套规则决定了用户是否可以执行操作。eyeos中负责进行这些检查的组件是安全管理器。从一个程序员的角度来看,安全管理器不是很有趣,但重要的是了解它,以便了解eyeos拒绝某些操作的原因,或修改系统来做一些事(这通常是不允许的)。安全管理的规则在xml格式的文件eyeos/system/conf/services/security/securitymanager.xml内。这是一套策略并包括对应的处理程序。策略是应用到一个对象类型的规则,即一个类。正常情况下,开发人员使用类来访问系统资源,安全管理器用于指定这些类的规则例如,代表一个文件的对象,或者代表一个进程的对象。了解策略的最佳方式是首先研究文件中出现的. 本策略适用于当有人试图操纵一个类型为eyeuserfile的对象。这个对象被用于访问属于某个用户的文件,通过fsi:getfile。重要的是要认识到处理程序从上到下处理,从第一个开始一直执行到最后一个。每个处理程序的“flag”参数指定是否继续评估处理。 第一个处理程序(用于在上面显示的策略)是. 此处理程序规定,如果在“admin”组的用户(见处理程序内的),那么这已经是“sufficient”,不需要任何其他检查,用户可以访问该文件。这一策略的下一个处理程序是.此处理程序检查用户是否属于组“vfs”,“requisite”标志表明,如果用户属于该组,则可以访问,但安全管理器继续评估其他处理。再就是. . shareableobjectssecurityhandler用sufficient标志,这意味着,如果该文件是一个共享文件,则授权访问。最后. eyeosfilesecurityhandler是一个基本的检查,如果该文件属于某用户,因此,他可以访问它(用户可以随时访问自己的文件)。通过指定required标识,如果符合这条规则,用户将被允许访问,但将继续评估其他规则(虽然在这个策略里其实没有更多的规则了)。总之,对于这些处理器这些策略允许你访问该文件:如果你是一个管理员,如果该文件是共享的,或者如果该文件是你的。如果该文件不是共享的,你不是管理员,文件也不是你的,那么你必须在组“vfs”中才能访问,否则访问被拒绝。 从这个xml文件里面调用的处理程序在eyeos/system/kernel/services/securityimplementations/handlers/文件夹下定义。任何人都可以创建一个新的处理程序,并从securitymanager.xml文件里调用它。15.m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防爆配电箱租赁协议书
- 锅炉安装工程内部承包合同
- 工作室合租合同书
- 常用药店股份合作协议书
- 电话通信服务话费托收协议书
- 贵州省六盘水市2024年七年级上学期期中数学试题【附答案】
- 4.1常见地貌类型+风沙地貌-高一地理人教版(2019)必修一
- 工程项目成本风险分析及管理
- 河北省唐山一中高三下学期强化提升考试(六)英语试题
- 07陌生物质性质与制备探究(原卷版)
- 高中英语外刊-小猫钓鱼50篇
- 监理大纲工程监理方案技术标投标方案
- 《3.2认识居民身份证》道法课件
- 《园林制图》课件-曲线与曲面
- 中国移动:5G-A无源物联网典型场景技术解决方案白皮书2024
- PowerPoint培训教程课件
- 医疗绿色通道医联体协议书
- 2023-2024学年北京市八中九年级上学期期中考试物理试卷含详解
- 2024事业单位招聘考试时事政治考试题库学生专用
- 兽医病理学智慧树知到期末考试答案章节答案2024年浙江农林大学
- 《心系国防 有你有我》国防教育主题班会课件
评论
0/150
提交评论