帐户关于数据库的存取定义 - 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)
表示赋予了馆员账户对200
和606
两个字段具有插入、替换、删除的操作权限,但是如果想要精确控制 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。即不指定细节操作类型的情况下,系统自动识别这三种。