DEFINE VARIABLE SecAdmin AS CHARACTER NO-UNDO.
DEFINE VARIABLE cPassword AS CHARACTER NO-UNDO.
ASSIGN SecAdmin = 'sysprogress'
cPassword = 'foobar'.
FIND _user WHERE _user._userid = SecAdmin NO-LOCK NO-ERROR.
IF AVAILABLE _user
THEN DO TRANSACTION:
FIND _user WHERE _user._userid = SecAdmin EXCLUSIVE-LOCK NO-ERROR.
IF AVAILABLE _user
THEN DO:
DELETE _user.
END.
END.
DO TRANSACTION:
CREATE _User.
ASSIGN _User._Userid = SecAdmin
_User._password = ENCODE(cPassword)
_User._User-name = SecAdmin.
/* Grant necessary permissions on _File table */
FIND DICTDB._File "_File" WHERE DICTDB._File._Owner = "PUB".
RETURN.
/* Grant Write permission on _File._Can-read */
FIND DICTDB._Field "_Can-read" OF _File.
IF NOT CAN-DO(_Field._Can-write,SecAdmin) THEN
ASSIGN _Field._Can-write = _Field._Can-write + "," + SecAdmin.
/* Grant Write permission on _File._Can-write */
FIND DICTDB._Field "_Can-write" OF _File.
IF NOT CAN-DO(_Field._Can-write,SecAdmin) THEN
ASSIGN _Field._Can-write = _Field._Can-write + "," + SecAdmin.
/* Grant Write permission on _File._Can-create */
FIND DICTDB._Field "_Can-create" OF _File.
IF NOT CAN-DO(_Field._Can-write,SecAdmin) THEN
ASSIGN _Field._Can-write = _Field._Can-write + "," + SecAdmin.
/* Grant Write permission on _File._Can-delete */
FIND DICTDB._Field "_Can-delete" OF _File.
IF NOT CAN-DO(_Field._Can-write,SecAdmin) THEN
ASSIGN _Field._Can-write = _Field._Can-write + "," + SecAdmin.
/* Grant necessary permissions on _Field table */
FIND DICTDB._File "_Field" WHERE DICTDB._File._Owner = "PUB".
/* Grant Write permission on _Field._Can-read */
FIND DICTDB._Field "_Can-read" OF _File.
IF NOT CAN-DO(_Field._Can-write,SecAdmin) THEN
ASSIGN _Field._Can-write = _Field._Can-write + "," + SecAdmin.
/* Grant Write permission on _Field._Can-write */
FIND DICTDB._Field "_Can-write" OF _File.
IF NOT CAN-DO(_Field._Can-write,SecAdmin) THEN
ASSIGN _Field._can-write = _Field._Can-write + ',' + SecAdmin.
/* Grant necessary permissions on _User table */
FIND DICTDB._File "_User" WHERE DICTDB._File._Owner = "PUB".
/* Grant Create permission on _User */
IF NOT CAN-DO(_File._Can-create,SecAdmin) THEN
ASSIGN _File._Can-create = _File._Can-create + "," + SecAdmin.
/* Grant Delete permission on _User */
IF NOT CAN-DO(_File._Can-delete,SecAdmin) THEN
ASSIGN _File._Can-delete = _File._Can-delete + "," + SecAdmin.
END. /*transaction */