Je dois appeler aspnet_UsersInRoles_IsUserInRole à partir d'Aspnet Membership.Im faire un appel dapper comme ceci:
public int CheckIfUserIsInRole(IsUserInRole userInRole)
{
using (var connection = new SqlConnection(ConfigurationSettings.GetConnectionString()))
{
DynamicParameters param = new DynamicParameters();
param.Add("@UserName", userInRole.UserName);
param.Add("@ApplicationName", userInRole.ApplicationName);
param.Add("@RoleName", userInRole.RoleName);
return connection.Query("aspnet_UsersInRoles_IsUserInRole", param, commandType: CommandType.StoredProcedure).FirstOrDefault();
}
}
Et dans le contrôleur, j'ajoute:
public int IsUserInRole(IsUserInRole isUserInRole)
{
var model = _userRepository.CheckIfUserIsInRole(new IsUserInRole()
{
UserName = "testuser",
RoleName = "user",
ApplicationName = "USERMANAGEMENT"
});
return model;
}
L'utilisateur existe et a le rôle correct mais à chaque fois il retourne 0. Voici la procédure stockée à partir de l'adhésion à AspNet:
ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_IsUserInRole]
@ApplicationName nvarchar(256),
@UserName nvarchar(256),
@RoleName nvarchar(256)
COMME COMMENCER DECLARE @ApplicationId identifiant unique SELECT @ApplicationId = NULL SELECT @ApplicationId = ApplicationId FROM aspnet_Applications OOWER LOWER (@ApplicationName) = LoweredApplicationName SI (@ApplicationId EST NULL) RETURN (2) DECLARE @UserId uniqueidentifier SELECT @UserId = NULL DECLARE SELECT @RoleId = NULL
SELECT @UserId = UserId
FROM dbo.aspnet_Users
WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId = @ApplicationId
IF (@UserId IS NULL)
RETURN(2)
SELECT @RoleId = RoleId
FROM dbo.aspnet_Roles
WHERE LoweredRoleName = LOWER(@RoleName) AND ApplicationId = @ApplicationId
IF (@RoleId IS NULL)
RETURN(3)
IF (EXISTS( SELECT * FROM dbo.aspnet_UsersInRoles WHERE UserId = @UserId AND RoleId = @RoleId))
RETURN(1)
ELSE
RETURN(0)
FIN
Où je me trompe? Des conseils pour y remédier?
J'ai besoin de cette procédure stockée pour vérifier si l'utilisateur est dans ce rôle afin que je puisse l'utiliser pour [AuthorizeRoles ("RoleTest")]
Cette procédure stockée ne renvoie aucun enregistrement. il utilise la valeur de retour à la place. Cela doit être traité comme un paramètre:
public int CheckIfUserIsInRole(IsUserInRole userInRole)
{
using (var connection = new SqlConnection(ConfigurationSettings.GetConnectionString()))
{
DynamicParameters param = new DynamicParameters();
param.Add("@UserName", userInRole.UserName);
param.Add("@ApplicationName", userInRole.ApplicationName);
param.Add("@RoleName", userInRole.RoleName);
param.Add("@ReturnValue", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
connection.Execute("aspnet_UsersInRoles_IsUserInRole", param, commandType: CommandType.StoredProcedure);
return param.Get<int>("@ReturnValue");
}
}
https://github.com/StackExchange/dapper-dot-net#stored-procedures
(Également publié sur votre copie de cette question sur CodeProject .)