Users、UserRoles、Rolesの3つのテーブルがあります。
- Usresテーブルの列はUserId(Pk varchar(20))、CashCenterId(Int)です。
- UserRolesの列は、UserRoleID(pk Int)、UserId(Fk to user table)、RoleID(Fk to role Table)です。
- ロールの列は、RoleId(Pk int)、RoleName(varchar(30))です。
LINQ toENTITYFrameworkを使用してクエリを実行しています。
ここで、logginユーザーが「FFFAdmin」ロールを持っているかどうかをチェックする関数が必要なので、logginユーザーのUserIdをこの関数に渡し、関数で次のようにします。
public bool isUserFFFAdmin(string UserId){
return (from u in Db.Users
join ur in Db.UserRoles on u.UserID equals ur.UserID
join r in Db.Roles on ur.RoleID equals r.RoleID
where r.RoleName == "FFFAdmin"
&& u.UserID.Equals(UserId)
select '1').Any();
}
ここで問題となるのは、このクエリでは大文字と小文字が区別されないため、2人のユーザーが
1.ロール「siteUser」の「RAM」2。ロール「FFFAdmin」の「ram」
'Ram'を渡すと、この関数はfalseを返すはずですが、このクエリでは大文字と小文字が区別されないため、trueが返されます。
注*データベースの照合タイプを変更して、クエリの大文字と小文字を区別することはできません。私がエンティティとLInqを初めて使用するのを手伝ってください。