我正在asp.net(C#)的網站上工作。我想授權每個登錄用戶(限制打開任何用戶沒有權限的網頁)。我有2個表用戶和角色在Sql Server從我想要角色&然後授權該用戶。從c#數據庫授權用戶
0
A
回答
1
因爲用戶和角色有多對多的關係,所以用戶和角色之間會有另一個聯結表。比方說,這將是的UserRole
所以,現在對任何要求您將設計一個全球性的過濾器/處理器將執行以下操作:如果你想使用一個存儲過程來驗證用戶接入
var user = Session["UserName"]; // getting logged in user
var role = // query that junction table **UserRoles** to get all the roles this current user has
0
,你將需要:
1)額外的表存儲角色爲用戶 - 姑且稱之爲UserXRole
2)存儲過程或用戶定義的函數來獲取用戶角色或檢查用戶是否具有某個角色。類似以下內容:
CREATE PROCEDURE dbo.UserHasRole
(
@UserId INT,
-- if you provide role name or code, an extra join with dbo.Role is required
@RoleId INT
)
AS
BEGIN
DECLARE @result BIT = (CASE
WHEN EXISTS (
SELECT 1
FROM dbo.UserXRole X
WHERE X.UserId = @UserId AND X.RoleId = @RoleId) THEN 1
ELSE 0)
RETURN @result
END
代碼服從用戶定義的函數限制,所以您可以將其更改爲返回BIT的函數。如果您懷疑認證邏輯將來可能會變得複雜,請將其保留爲存儲過程。
3)呼叫使用當前登錄用戶標識符
每當你驗證用戶身份驗證,我希望把關於用戶登錄到Session
對象的一些信息的程序。
檢查用戶必須具備某種角色才能執行某些操作意味着使用當前用戶標識(例如Session["UserId"]
)和所需角色(RoleId
)調用存儲過程。
上述方法應該可行,但它可能會導致對您的數據庫的很多調用。更好的方法是:
1)在認證時緩存所有用戶角色 - 當用戶通過認證時,將他/她的所有角色存儲在會話中的列表中。例如: -
Session["CurrentUserRoles"] = rolesFromDb.Select(r => r.RoleId).ToList();
2)檢查,如果用戶有一定的作用在內存中只是做。例如:
bool hasSomeRole = (Session["CurrentUserRoles"] as IList<int>)?.Contains(someRoleId) ?? false;
事實上,問題是相當廣泛的。嘗試使用建議的解決方案之一,並在遇到困難時回覆更具針對性的問題。
相關問題
- 1. 授權用戶從MySQL數據庫
- 2. 授予數據庫用戶權限
- 3. JDBC - 授權用戶通過數據庫
- 4. 如何將用戶添加到數據庫並授權用戶
- 5. 數據庫授權更新
- 6. 爲授權用戶創建賬戶的數據庫設計
- 7. 應用程序使用數據庫授權和驗證用戶
- 8. 從授權的Google帳戶獲取基本的用戶數據
- 9. 如何使用Puppet授予用戶Mongodb數據庫特權?
- 10. MVC4,根據用戶表授權用戶
- 11. 如何生成授予數據庫用戶的數據庫表的權限表?
- 12. 「真實」數據庫授予用戶什麼權限?
- 13. 授權邀請用戶通過數據庫觸發器
- 14. 解析數據庫授權 - 用戶對象的安全
- 15. MYSQL:授予權限給所有的用戶對數據庫
- 16. Postgres創建數據庫用戶只有授權訪問模式
- 17. 將權限授予多個數據庫用戶在一行
- 18. MongoDB未經授權的用戶可以創建數據庫
- 19. PHP PDO創建MySQL數據庫和用戶,並授予權限
- 20. 授予用戶一個數據庫問題的權限
- 21. 數據庫授予權限表一個未知的用戶
- 22. 什麼數據庫特權授予用戶?
- 23. 結合用戶數據庫中的授權角色
- 24. 如何從數據庫和授權用戶收回醃製密碼?
- 25. SQL Server授予用戶從另一個數據庫的EXECUTE權限
- 26. 從sqlite數據庫中搜索用戶並授予其登錄權限?
- 27. PowerShell用戶授權
- 28. Swift用戶授權
- 29. Rails用戶授權
- 30. has_secure_password用戶授權
我既不使用asp.net身份也不使用MVC,它是一個簡單的asp.net網站。我只通過sql sp驗證用戶。 –