2014-03-06 23 views
0

我正在設計一個Web應用程序,作爲創建數據庫的第一步。現在非常基本的表叫Role需要通過數據庫來管理。該表將舉行:什麼是在數據庫中創建主表並在應用程序中使用它們的理想設計

RoleID (Identity and Primary Key) 
RoleName (Varchar) 

現在,在應用程序,如果我需要檢查是否爲「管理員」的角色,使其他按鈕禁用它的一個。那麼我應該如何編寫一個沒有硬編碼「Admin」作爲角色的代碼呢?

在這種情況下,如何在數據庫中存儲Master之類的數據並在應用程序中引用該數據可能是一個好設計?

我用enum做早期的,但因爲如果我加入數據庫中的新角色,然後我還需要改變enum的代碼,例如,它似乎它沒有太多的維護

public enum Role 
{ 
    Admin=1, 
    Normal=2 
} 
+0

看到這個線程:http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database它似乎是一個好主意,使代碼主要枚舉,然後只是推動在某個時候向DB提供信息。 (並且讀回特定的值)注意:你的「角色」可能僅僅是在它被分配給某個東西之後意味着什麼,你描述的表只會包含所有可能值的列表,但不會將角色映射到用戶或頁面。 – 2014-03-06 13:24:03

+0

如果這是一個asp.net Web應用程序,爲什麼不使用標準表單身份驗證? –

+0

@AaronPalmer我不記得ASP.NET窗體身份驗證爲一件事提供了一個強大的組(或角色)的概念。此外,它往往會促使您將授權存儲到XML文件中,這通常會更好地保存在程序的數據庫中,讓程序更輕鬆地管理它。它也可能促使你爲每個網頁用戶提供「windows用戶」,這很容易讓人發瘋。 – 2014-03-06 13:33:08

回答

0

創建權限表會更好。 但簡單的辦法就是添加一個字段'

PermissionType int 

,然後你可以將權限分配給不同的角色

+0

可幫助我們通過示例瞭解許可的含義。你在想「插入/更新/刪除/ viewmoney」?如果權限是被操縱目標上的動詞(可能是頁面)? – 2014-03-06 13:53:07

1

最簡單的解決辦法是擴大你的表結構是這樣的:

RoleID INT 
RoleName NVARCHAR 
IsAdmin BIT 

或者你可以用user1795177的方法創建你分配給每個角色的特殊權限。

請在SQL Server中使用NVARCHAR而不是VARCHAR來支持unicode。

+0

對於NVARCHAR評論+1,我用VARCHAR以艱苦的方式學習了我的教訓! –

+0

如果1是唯一的管理員,並且2是比IsAdmin,IsNormal和IsHappyCamper全部標誌唯一正常似乎沒有幫助的。如果用戶可以擁有多個角色,則該信息已由RoleID定義或存儲在映射中。注意:如果你爲root/admin提倡單一級別的設置,那麼我並不反對它可以大大簡化事情......但它通常在正常授權配置之外。 – 2014-03-06 13:55:48

0

你按鈕不需要檢查角色,而是檢查權限。 例如:如果頁面允許查看/修改/添加/刪除項目,那麼你將有4權限

public enum Permission 
{ 
    View = 1 
    Modify = 2 
    Add = 4 
    Delete = 5 
} 

在數據庫中,你將有一個角色表,指示它們所具有的權限。

管理員可以有查看/修改/添加/刪除 一般可以有查看/修改

你再設置添加按鈕狀態取決於當前角色的權限。這樣你就不需要關心有多少角色存在。再進一步,每個權限可以附加到一個實體。

例如:正常可以在客戶實體上添加/修改/查看,但不是發票實體。

相關問題