私はasp.net(C#)のウェブサイトで作業しています。ログインしているすべてのユーザーに権限を与えたい(権限がないWebページを開くように制限する)。私は2つのテーブルのユーザーとロールをSql Serverでロールを取得したいところから&そのユーザーを承認します。データベースからユーザを認証するC#
答えて
ユーザーとロールには多対多の関係があるため、ユーザーとロールの間に別のジャンクション・テーブルが存在します。ストアドプロシージャを使用して、ユーザのアクセスを検証したい場合は
var user = Session["UserName"]; // getting logged in user
var role = // query that junction table **UserRoles** to get all the roles this current user has
:だから、今どんなリクエストに応じて次の操作を実行しますグローバルなフィルター/ハンドラを設計しますUserRoles
になりましょうユーザーのロールを格納するために
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
オブジェクトにログインしたユーザーに関する情報を置くことを期待しています。
何かを実行するためにユーザーが特定の役割を持っていることを確認することは、現在のユーザーID(例:Session["UserId"]
)と必要な役割(RoleId
)でストアドプロシージャを呼び出すことを意味します。
上記のアプローチはうまくいくはずですが、データベースへの呼び出しが多くなることがあります。
1)認証時にすべてのユーザー役割をキャッシュする - ユーザーが認証されると、すべての役割がセッション内のリストに格納されます。例えば:
Session["CurrentUserRoles"] = rolesFromDb.Select(r => r.RoleId).ToList();
2)ユーザーが役割はメモリ内でのみ行われているかどうかの確認。たとえば、
bool hasSomeRole = (Session["CurrentUserRoles"] as IList<int>)?.Contains(someRoleId) ?? false;
これは問題ではありません。提案されたソリューションの1つを試してください。
- 1. AndroidからMVCユーザを認証する
- 2. symfony 3はデータベースからユーザを認証していません
- 3. Mysqlデータベース経由でのユーザ認証
- 4. ユーザ認証デザインは、ユーザですか?
- 5. 基本認証からユーザ名にアクセス
- 6. スプリングセキュリティ、データベースからの認証
- 7. ユーザの認証
- 8. Firebase認証からユーザのリストを取得する
- 9. Webアプリケーションからfirebase認証済みユーザを削除する
- 10. ピラミッドのユーザ認証
- 11. Relayjs Graphqlユーザ認証
- 12. ウェブアプリケーションのユーザ認証
- 13. LDAPユーザ認証が
- 14. Bcryptによるユーザ認証
- 15. データベースC#のユーザ名を確認する方法は?
- 16. RavenDBでユーザを認証する方法
- 17. Symfony 2.3:認証されたユーザをデータベースからどのように更新するのですか?
- 18. プラグイン "Hello World!"ユーザのユーザ認証
- 19. データベースからユーザを選択
- 20. djangoがユーザ認証を検証するジェネリッククラスを作成する
- 21. Firebaseデータベースからユーザを削除する
- 22. 認証されたユーザのみでFirebaseデータベースに書き込む
- 23. ユーザFirebase電話認証
- 24. OAuth2帯域外ユーザ認証
- 25. ウェブアプリケーション - ドメイン間のユーザ認証
- 26. ユーザ名とパスワードの認証
- 27. Node.jsウェブサイトのユーザ認証
- 28. TortoiseSVNのユーザ認証ダイアログ
- 29. PythonのFirebaseユーザ認証
- 30. Padrinoの基本ユーザ認証
私はasp.net IDもMVCも使用していません。その単純なasp.net Webサイトです。私はSQL SPのみでユーザーを検証しています。 –