帐户关于数据库的存取定义 - DigitalPlatform/dp2 GitHub Wiki

从以下几个方面配置用户对数据库的访问权限

1)配置一些用户对数据库仅有只读权限,配置另一些用户对数据库有读写权限。(支持)
2)配置仅对部分MARC字段有编辑权限。(支持)
3)配置工作人员只能修改自己创建的marc记录,超级管理员可以修改全部人员的marc记录。(支持)
4)支持对数据库分区段定义权限(暂不支持)


配置用户对数据库的访问权限

“配置用户对数据库的访问权限”可通过设定馆员账户的“存取定义”来实现。关于“存取定义”介绍

格式一

中文图书:setbiblioinfo=new,ownerchange|getbiblioinfo=*;中文期刊:getbiblioinfo=*;

表示,该账户“中文图书”库具有新建,并限定仅允许修改自己创建的书目记录,对“中文期刊”库有获取记录权限,但没有新建,修改和删除记录的权限;

注意配置的时候不同库之间用英文分号隔开;同一库的不同权限之间用英文竖线隔开;同一库的同一权限下属子权限之间用英文逗号隔开。

“仅修改自己创建的书目记录”权限定义,也就是 ownerchange。类似,还有ownerdelete,意思是仅允许删除自己创建的记录;还有owneronlydeletebiblio,意思是仅允许删除自己创建的书目记录,但不同时删除下级记录(册,期,订购,对象等)。

“自己创建的”,指 998$z 中是登录者的帐户名。 (这里需要提醒的是,书目记录一旦创建,除非特意修改该子字段内容情况外,即便其他馆员账户利用 dp2circulation 修改过这条记录,998$z 也会一直保持最初的内容不会变动。)

格式二

中文图书:setbiblioinfo=*

表示该账户对“中文图书”库的全部记录具有创建(new)、修改(change)、删除(delete)的操作权限。虽然*(星号)从概念上大致等同于“new,change,delete,ownerchange,ownerdelete,onlydeletebiblio,owneronlydeletebiblio”但是含有“owner”字样的权限值效力低于不带有“owner”的对等权限值,因此含有“owner”字样的权限不生效。如果要达到含有“owner”字样的权限效果,就不能采用上述*(星号)通配“隐式定义”的方法,而是需要分别一一列举“显式定义”的方式。

在一一列举“显式定义”的方式中,假如同时列举了含有“owner”字样的权限和对等的形态都列出来(例如 ownerdelete和delete),则含有“owner”字样的权限优先于不含有该字样的权限,这点要引起注意。(设计上主要是想与*(星号)的情况有所区别,以提供多样化配置的可能性。)

权限代码 备注
new 新建
change 修改
delete 删除(含下级记录)
onlydeletebiblio 仅删除书目记录
ownerchange 仅允许修改自己创建的书目记录
ownerdelete 仅允许删除自己创建的记录
owneronlydeletebiblio 仅允许删除自己创建的书目记录(不含下级记录)

形式三

中文图书:setbiblioinfo=new,change(606,690)|getbiblioinfo=*;

表示馆员账户对“中文图书”库具有新建和修改书目记录的权限,具体来说是可以执行 new 和 change 操作,其中 change 操作被限定了字段访问能力,只能修改 606 和 690 两个字段。这里 new 操作因为没有定义括号表示的字段访问权限,所以默认,即全部字段都可以访问。

字段权限是定义在括号里,示例中606,690是一种定义方式,即用,(逗号)连接列举字段名。还可以001,200-500,606即用-(短横线)表示字段名的数字范围。字段名的数字范围起止号码不需要前一个号码比后一个数字值小,如果数字值大小颠倒,系统也可以识别。

在字段名的数字范围中用###表示头标区。例如, ###,001-999 差不多等于表达了全部字段。

增强修改书目记录“存取定义”

中文图书:setbiblioinfo=new,change(200,606),delete|getbiblioinfo=*;

其中change(200,606)表示赋予了馆员账户对200606两个字段具有插入、替换、删除的操作权限,但是如果想要精确控制 change 操作字段的权限,即 插入(insert)、替换(replace)、删除(delete)三种细节操作来定义,内容为:

中文图书:setbiblioinfo=new,change(insert:200,606;replace:200;delete:606),delete|getbiblioinfo=*;

在“存取定义”中仅仅定义三种细节操作中的一种或两种,那么没有定义的细节操作则不被允许。例如 change(insert:200)表示只能插入200字段,而不能操作替换和删除。

为了简便定义,对于插入、替换、删除三种细节操作都指定了相同字段列表的,可以这样定义: change(insert,replace,delete:200-500),或者缩略定义:change(i,r,d:200-500) 也相当于change(*:200-500),再进一步相当于change(200-500)

新建书目记录的细节定义

对于存取定义中的 new 操作来说,一般定义这样的字段列表就可以了:

中文图书:setbiblioinfo=new(200,606)|getbiblioinfo=*;

缺省的细节操作是 insert。

如果要细节定义,可以定义为: 中文图书:setbiblioinfo=new(insert:200,606)|getbiblioinfo=*;

而如果这样定义: 中文图书:setbiblioinfo=new(insert,replace:200,606)|getbiblioinfo=*;

其中 replace 细节操作部分属于多余的定义,不会发生实际作用。

删除操作的细节定义

有疑问,待测试验证

对于存取定义中的 delete(删除) 操作来说,与new操作类似,一般定义字段列表就可以了:

中文图书:setbiblioinfo=delete(200,606)|getbiblioinfo=*;

缺省的细节操作是 delete。

中文图书:setbiblioinfo=delete(delete:200,606)|getbiblioinfo=*;

其他操作

复制另存书目记录,在“存取定义”中下列操作部分的定义。

操作代码 备注
copy 复制
move 另存
onlycopybiblio 仅复制书目
onlymovebiblio 仅另存书目

缺省的细节操作是 insert,replace,delete。即不指定细节操作类型的情况下,系统自动识别这三种。