我正在使用VB.Net和Oracle 11g連接通過ODAC來構建桌面應用程序,它應該非常簡單,但我面臨着一種情況。在VB.net中的Oracle角色Winforms應用程序
我有我的安全角色和用戶在Oracle數據庫上定義,我的意圖是根據每個角色顯示菜單(即管理員應該看到每個菜單,而用戶只有相關的菜單)我的問題是如何完成?
我正在創建一個帶有用戶名和角色的單獨表格,但我敢打賭,有一個更好的方法來處理這個問題。現在願意採取所有建議
我正在使用VB.Net和Oracle 11g連接通過ODAC來構建桌面應用程序,它應該非常簡單,但我面臨着一種情況。在VB.net中的Oracle角色Winforms應用程序
我有我的安全角色和用戶在Oracle數據庫上定義,我的意圖是根據每個角色顯示菜單(即管理員應該看到每個菜單,而用戶只有相關的菜單)我的問題是如何完成?
我正在創建一個帶有用戶名和角色的單獨表格,但我敢打賭,有一個更好的方法來處理這個問題。現在願意採取所有建議
您可以使用功能DBMS_SESSION.IS_ROLE_ENABLED
來獲取這些信息。
PL/SQL部分會是這樣
CREATE OR REPLACE FUNCTION IsRoleGranted(RoleName IN VARCHAR2) RETURN Integer IS
BEGIN
IF DBMS_SESSION.IS_ROLE_ENABLED(RoleName) THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END IsRoleGranted;
在VB.NET您的通話功能是這樣的:
Dim cmd As OracleCommand
Dim con As OracleConnection
con = New ...
cmd = New OracleCommand("BEGIN IsRoleGranted(:role); END;" con)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("res", OracleDbType.Byte, ParameterDirection.ReturnValue)
cmd.Parameters("res").DbType = DbType.Byte
cmd.Parameters.Add("role", OracleDbType.Varchar2, ParameterDirection.Input).Value = "MYAPP_ADMIN"
cmd.ExecuteNonQuery()
AdminMenu.Visible = CByte(cmd.Parameters("res").Value) = 1
DBMS_SESSION.IS_ROLE_ENABLED
是很容易,查詢視圖SESSION_ROLES
使用,因爲它也涵蓋了角色的層次結構,即角色被授予另一角色時的角色。
我會採取這種方法,會讓你知道結果 – chinchillaboy 2015-04-08 20:19:45
在Oracle中使用活動目錄角色和用戶填充表是常用的解決方案。 Oracle有一個DBMS_LDAP包來訪問Active Directory,因此您可以獲取應用程序的組列表。我建議在您的應用中使用的角色的前綴,例如MyApp_admin,MyApp_user。
然後運行計劃工作,讓那些在羣體中的用戶,並將其填充到 這樣的僞碼錶
表GROUP_USER( ID號(9)主鍵, GROUP_NAME VARCHAR2(250 ), USER_NAME VARCHAR2(250));
我們通過使用登錄表單來獲取用戶和安全級別(在我們的例子中爲從0到9的int),然後使用'TreeView'對象作爲菜單並僅顯示基於用戶的安全級別與我們在程序中編寫的每個菜單選項的預定安全級別之間的關係。如果用戶安全性高於菜單項安全性,則會顯示,反之亦然。希望能給你一些工作。 – RianBattle 2015-04-06 14:01:29