diff --git a/src/box/lua/schema.lua b/src/box/lua/schema.lua index 308d1842d41a65cb8a842d85be82e77cc6fed368..c58956bf670736f8f74edf68eecf30ddf1aae6f2 100644 --- a/src/box/lua/schema.lua +++ b/src/box/lua/schema.lua @@ -1372,24 +1372,30 @@ box.schema.user.drop = function(name, opts) return drop(uid, opts) end +local function info(id) + local _priv = box.space._priv + local _user = box.space._priv + local privs = {} + for _, v in pairs(_priv:select{id}) do + table.insert( + privs, + {privilege_name(v[5]), v[3], object_name(v[3], v[4])} + ) + end + return privs +end + box.schema.user.info = function(user_name) local uid if user_name == nil then uid = box.session.uid() else - uid = user_or_role_resolve(user_name) + uid = user_resolve(user_name) if uid == nil then box.error(box.error.NO_SUCH_USER, user_name) end end - local _priv = box.space._priv - local _user = box.space._priv - local privs = {} - for _, v in pairs(_priv:select{uid}) do - table.insert(privs, - {privilege_name(v[5]), v[3], object_name(v[3], v[4])}) - end - return privs + return info(uid) end box.schema.role = {} @@ -1442,7 +1448,13 @@ box.schema.role.revoke = function(user_name, ...) end return revoke(uid, user_name, ...) end -box.schema.role.info = box.schema.user.info +box.schema.role.info = function(role_name) + local rid = role_resolve(role_name) + if rid == nil then + box.error(box.error.NO_SUCH_ROLE, role_name) + end + return info(rid) +end -- -- once diff --git a/test/box/role.result b/test/box/role.result index 22ca8e0e2f3b891356707024bde6f4d452f949d1..d4e8fe935f4fff2ecbc0505e092a32245a42c89f 100644 --- a/test/box/role.result +++ b/test/box/role.result @@ -896,3 +896,42 @@ box.schema.role.info('X1') --- - [] ... +-- gh-867 inconsistent role/user info +box.schema.role.create('test_role') +--- +... +box.schema.role.info('test_role') +--- +- [] +... +box.schema.user.info('test_role') +--- +- error: User 'test_role' is not found +... +box.schema.role.info('test_not_exist') +--- +- error: Role 'test_not_exist' is not found +... +box.schema.user.create('test_user') +--- +... +box.schema.user.info('test_user') +--- +- - - execute + - role + - public +... +box.schema.role.info('test_user') +--- +- error: Role 'test_user' is not found +... +box.schema.user.info('test_not_exist') +--- +- error: User 'test_not_exist' is not found +... +box.schema.role.drop('test_role') +--- +... +box.schema.user.drop('test_user') +--- +... diff --git a/test/box/role.test.lua b/test/box/role.test.lua index 86cc146c8923d00f4b4b86b35c4160ad97afa0a1..48441774152cce6dfc7af356dacb3925eeb66c48 100644 --- a/test/box/role.test.lua +++ b/test/box/role.test.lua @@ -352,3 +352,17 @@ box.schema.role.grant('X1','read','role','X2') box.schema.role.info('X1') box.schema.role.revoke('X1','read','role','X2') box.schema.role.info('X1') + +-- gh-867 inconsistent role/user info +box.schema.role.create('test_role') +box.schema.role.info('test_role') +box.schema.user.info('test_role') +box.schema.role.info('test_not_exist') + +box.schema.user.create('test_user') +box.schema.user.info('test_user') +box.schema.role.info('test_user') +box.schema.user.info('test_not_exist') + +box.schema.role.drop('test_role') +box.schema.user.drop('test_user')