怎样才能对于不同的用户看到相同表的不用字段? |
尚未結案
|
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
Mickey
版主 ![]() ![]() ![]() ![]() ![]() 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
引言: 怎样才能对于不同的用户看到相同表的不用字段?HarryZhang 你好 你這個需求,屬於權限控管的欄位權限,假設有個表格(TableA)其中有A..F六個欄位,對於USER1使用者,他只能看到A..E五個欄位,F欄位沒權限看到,對於USER2,可以設定可看到A..D四個欄位,其餘兩欄位看不到或看得到但不可更改,對於USER3.....,不知是否這個意思? 首先,要先設計權限設定的Form及存放位置(當然要與現有的權限控管系統結合),....最後從TDataSet的FieldDefs的Items(即TField表示個別的欄位)著手了,以下設定三種狀況的設定方式 1.正常可看到可修改:其實就是不用設定,用預設值即可。 2.可看到不可修改:TDataSet.FieldDefs[n].ReadOnly := True; 3.不可見當然不可改:TDataSet.FieldDefs[n].Visiable := False; 萬一你說的不是這麼一回事,那就當我沒說吧! |
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
Chance36
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:31 回覆:1033 積分:792 註冊:2002-12-31 發送簡訊給我 |
With Query1 Do Begin Close; SQL.Text := 'Select * From Table' ; Open; // 假設 AA 欄位無權瀏覽 FieldByName('AA').Visiable := False; // 假設 BB 欄位可瀏覽但不可修改 FieldByName('BB').ReadOnly := True; End; 引言: 能否在程式中用"select * from table",在SQL上控制设置这个些权限呢?我在SQL中是用NT帐号作为SQL的users来授权的,只要用户登陆到NT就有适当的权限.那我改如何设置?thanks.用戶登入到NT就有適當權限,不知如何得知該用戶對於Table的AA欄位沒有存取的權限?及對於BB有瀏覽但無修改的權限? 發表人 - chance36 於 2004/03/15 19:04:34 |
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
deity
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
HI HARRYZHANG, 在 DATABASE 中,建立
ACCOUNT1.VIEW1
ACCOUNT2.VIEW1
ACCOUNT3.VIEW1
.... 如此一來,在前端 SQL COMMAND 中下
SELECT * FROM VIEW1 當你以 ACCOUNT1 登入 DB 則相當於是 SELECT * FROM ACCOUNT1.VIEW1
若以 ACCOUNT2 登入 DB 則相當於是 SELECT * FROM ACCOUNT2.VIEW1 而在 ACCOUNT1.VIEW1、ACCOUNT2.VIEW1、ACCOUNT3.VIEW1 中,則可以獨自 SELECT 各自的 FIELD 即可 PS: 若使用者眾多,這不會是一個好辦法
------
Fishman |
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi HarryZhang, 除了 VIEW 外,看來如果須達到你要的功能,建議你如 Chance36 大大所言,建立一個權限控管的 Table 再於前端動態改變各欄位屬性
引言: 1.正常可看到可修改:其實就是不用設定,用預設值即可。 2.可看到不可修改:TDataSet.FieldDefs[n].ReadOnly := True; 3.不可見當然不可改:TDataSet.FieldDefs[n].Visiable := False;至於權限控管 TABLE 結構大致如下 USER_ID TABLE_NAME FIELD_NAME QUERY_FLAG EDIT_FLAG .... 供你參考
------
Fishman |
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi HarryZhang,
剛剛又想了一個新方法,是將上述兩種用法加以組合應用 1.在 DataBase 中,建立使用者帳號 Group1 Group2 Group3 ..... 2.在 DataBase 中,建立 View Group1.View1 Group2.View1 Group3.View1 .... 而在 Group1.View1、Group2.View1、Group3.View1 中,則可以獨自 SELECT 各自的 FIELD 即可 3.在 DataBase 中,建立一個權限控管的 Table Account Group ========== ========== Account1 Group1 Account2 Group1 Account3 Group2 Account4 Group3 ..... 當以 Account1 登入系統,會讀出 Account1 登入 DB 帳號為 Group1,意即用 Group1 帳號去登入 DB, 如此一來,在前端 SQL COMMAND 中下 Select * from View1 則相當於是 SELECT * FROM Group1.View1 同理,若是 Account2 則相當於是 SELECT * FROM Group1.View1 若是 Account3 則相當於是 SELECT * FROM Group2.View1 若是 Account4 則相當於是 SELECT * FROM Group3.View1 如此可減少 View 的建立,但是必須額外建立 Group1、Group2、Group3... 等帳號
------
Fishman |
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
HarryZhang
一般會員 ![]() ![]() 發表:19 回覆:25 積分:8 註冊:2003-01-03 發送簡訊給我 |
|
Fishman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |