我正在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. 從授權的Google帳戶獲取基本的用戶數據
- 8. 如何使用Puppet授予用戶Mongodb數據庫特權?
- 9. 如何生成授予數據庫用戶的數據庫表的權限表?
- 10. 「真實」數據庫授予用戶什麼權限?
- 11. 什麼數據庫特權授予用戶?
- 12. 將權限授予多個數據庫用戶在一行
- 13. 數據庫授予權限表一個未知的用戶
- 14. SQL Server授予用戶從另一個數據庫的EXECUTE權限
- 15. has_secure_password用戶授權
- 16. Rails用戶授權
- 17. mysql:具有授權選項的數據庫特定用戶權限委託
- 18. 解密數據只爲授權客戶
- 19. Cas認證和數據庫授權
- 20. ASP.NET默認授權數據庫?
- 21. 在MariaDB數據庫中授予特權
- 22. 向數據庫用戶授予許可
- 23. 多租戶數據庫。文件ID和授權策略
- 24. 從ActionFilterAttribute中「取消授權」用戶
- 25. 從Active Directory讀取用戶授權組
- 26. 限制使用asp.net授權從數據庫訪問一些數據
- 27. 授予用戶授予其他用戶的授權
- 28. Arangodb:arangosh獲得授予數據庫/用戶給定用戶/數據庫
- 29. 當用戶登錄時授予授權
- 30. 授予用戶使用給定名稱創建數據庫的權限
我既不使用asp.net身份也不使用MVC,它是一個簡單的asp.net網站。我只通過sql sp驗證用戶。 –