Caché 变量大全 $ROLES 变量
包含分配给当前进程的角色。
大纲
代码语言:javascript复制$ROLES
描述
$ROLES
包含分配给当前进程的角色列表。此角色列表由逗号分隔的字符串组成,该字符串可以包含用户角色和添加的角色。
通过使用SQL GRANT语句或使用Management Portal System Administration、Security、Users选项将角色分配给用户。选择用户名以编辑其定义,然后选择角色选项卡将该用户分配给角色。可以使用SQL CREATE ROLE语句定义角色,使用SQL DROP ROLE语句删除角色。必须先定义角色,然后才能将其分配给用户。可以使用SQL REVOKE语句撤销用户的角色。
使用JOB
命令创建进程时,它将继承与其父进程相同的$ROLES
和$USERNAME
值。
当进程执行I/O重定向时,将使用用户的LOGIN $ROLES
值而不是当前的$ROLES
值执行此重定向。
授予未列出的角色的角色
将角色授予另一个角色是仅可通过CachéSQL使用的概念。在SQL中使用授予角色的角色来确定用于检查SQL特权的用户角色列表。它们不能被ObjectScript访问。无法通过CachéSystem Security将角色授予其他角色。因此,$ROLES
特殊变量列表不包含SQL操作已授予当前角色的任何角色。
SET $ROLES
可以使用SET
命令更改$ROLES
中包含的列表的“添加角色”部分。设置$ROLES
仅会更改进程的“添加角色”。它不能更改其用户角色。将$ROLES
设置为“其他角色”的其他列表是受限制的系统功能。但是,此类限制不适用于将$ROLES
设置为空字符串,这将删除“添加角色”列表。
必须先定义角色,然后才能添加角色。可以使用SQL CREATE ROLE命令定义角色。 CREATE ROLE不授予角色任何特权。要为角色分配特权,请使用SQL GRANT语句或管理门户网站系统管理,安全性,角色界面。
在使用SET $ROLES
升级流程角色之前,必须发出NEW $ROLES
语句。
NEW $ROLES
NEW $ROLES
堆栈$ROLES
和$USERNAME
的当前值。可以在$ROLES
上使用NEW
命令,而没有安全限制。
发出NEW $ROLES
,然后SET $ROLES
以提供“添加的角色”。然后,可以创建使用这些“添加的角色”的对象实例。如果退出此例程,则Caché将使用“添加的角色”关闭对象,然后还原为堆叠的$ROLES
值。
示例
以下示例返回当前流程的角色列表。
代码语言:javascript复制DHC-APP>WRITE $ROLES
%All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser
以下示例首先创建角色Vendor, Sales, 和 Contractor。然后,它显示以逗号分隔的默认角色列表(包含用户角色和添加的角色)。第一个SET $ROLES
用Sales 和 Contractor.这两个角色替换“添加的角色”列表。第二个SET $ROLES
将Vendor角色连接到“已添加角色”列表。最后的SET $ROLES
将“已添加角色”列表设置为空字符串,从而删除所有“已添加角色”。用户角色在整个过程中保持不变:
/// d ##class(PHA.TEST.SpecialVariables).Roles()
ClassMethod Roles()
{
CreateRoles
&sql(CREATE ROLE Vendor)
&sql(CREATE ROLE Sales)
&sql(CREATE ROLE Contractor)
IF SQLCODE=0 {
WRITE !,"创建新角色"
DO SetRoles
} ELSEIF SQLCODE=-118 {
WRITE !,"角色已经存在"
DO SetRoles
} ELSE {
WRITE !,"创建角色失败, SQLCODE=",SQLCODE
}
SetRoles()
WRITE !,"初始化: ",$ROLES
NEW $ROLES
SET $ROLES="Sales,Contractor"
WRITE !,"代替: ",$ROLES
NEW $ROLES
SET $ROLES=$ROLES_",Vendor"
WRITE !,"Concatenated: ",$ROLES
SET $ROLES=""
WRITE !,"Nulled: ",$ROLES
}
代码语言:javascript复制DHC-APP>d ##class(PHA.TEST.SpecialVariables).Roles()
角色已经存在
初始化: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHE LIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser
代替: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELI B,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser,Sales,Contractor
Concatenated: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser,Vendor,Sales,Contractor
Nulled: %All,%Manager,�veloper,�_�FAULT,�_CACHE,�_CACHEAUDIT,�_CACHELIB,�_CACHESYS,�_CACHETEMP,�_DOCBOOK,�_DTApp,�_SAMPLES,�_TrakApp,�_USER,%Operator,%SQL,%SQLTuneTable,DTRole,Role_dhact,Role_dhapp,Role_dhdev,Role_dhduty,Role_dhreadonly,Role_dhsuper,Role_dhview,Role_webservice,TrakUser