RMS是微软的文档权限保护技术,Office 2003中的IRM也是基于RMS。用户可以对于Word等文档,指定相关的访问人以及他们的权限(如读取、修改、打印),以防止机密信息的泄漏。
默认情况下,用户需要指定文档的权限设置。但是对于某些企业,为了加强文档权限的管理,客户可能希望在Word 2003中自动设置文档权限,或者提示尚未设置权限的警告信息。
Word2003并没有直接支持权限自动设置功能,但是如果客户需要,可以通过开发Word的Add-in,响应文档创建、保存或者关闭等事件,在其中完成权限的设置(Office中提供了Permission对象,用于文档权限相关的操作)。可以使用VB、VS.Net等开发环境开发Add-In。
从可用性的角度考虑,由于强制设置的权限可能会给用户带来不便,建议仅在必要的情况下采用这种方法;另外,考虑到日常的管理问题,在企业环境中,Add-in应该支持通过管理的方式对于行为进行控制。
为了验证可行性,我写了一个简单的样例Add-in(基于VS2003的Add-In Wizard),它将在用户关闭文档时进行检查,如果没有权限保护,则弹出对话框提示用户。该样例并没有检查文档的状态(比如是否修改过)以便进行更精确的处理,仅仅作为演示的目的。
样例代码大部分由VS.Net Shared Add-in Wizards自动生成,我在其中仅加入了响应DocumentBeforeClose的相关代码,以便进行文件权限设置的检查以及提示消息框的显示:
在OnConnection函数中,加入:
关于Office编程的更多信息可以参考
applicationObject
=
(Microsoft.Office.Interop.Word.ApplicationClass)application;
applicationObject.DocumentBeforeClose
+=
new
Microsoft.Office.Interop.Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(Word_DocumentBeforeClose);
在Connect类中加入函数:
private
void
Word_DocumentBeforeClose(Microsoft.Office.Interop.Word.Document doc,
ref
bool
Cancel)
...
{
Microsoft.Office.Core.Permission perm=doc.Permission;
if (!perm.Enabled)
...{
System.Windows.Forms.DialogResult dr=System.Windows.Forms.MessageBox.Show("Your document isn't rights protected yet, Would you like to set it?","Permission",System.Windows.Forms.MessageBoxButtons.YesNo);
if (dr==System.Windows.Forms.DialogResult.Yes) Cancel=true;
}
}
在
Connect
类中定义变量:
private Microsoft.Office.Interop.Word.Application applicationObject;
为了使用该程序需要安装Office 2003 PIA和Word 2003 PIA,可以通过完全安装Office 2003确保及其上安装了上述PIA。关于PIA的更多信息,可以参考Office 2003 Primary Interop Assemblies (PIAs): http://msdn.microsoft.com/library/default.asp?url=/library/en-us/stagsdk/html/stconPIAs.asp
HOW TO:使用 Visual C# .NET 生成 Office COM 外接程序:http://support.microsoft.com/?id=302901
How To Handle Events for Word by Using Visual C# .NET:http://support.microsoft.com/default.aspx?scid=kb;EN-US;302817