0

Ich muss nennen aspnet_UsersInRoles_IsUserInRole von Aspnet Membership.Im machen adrett Aufruf wie folgt nennen:Wie aspnet_UsersInRoles_IsUserInRole Stored Procedure mit Dapper ORM

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();    
     } 
    } 

Und in Controller ich hinzufügen:

public int IsUserInRole(IsUserInRole isUserInRole) 
    {    
     var model = _userRepository.CheckIfUserIsInRole(new IsUserInRole() 
     { 
      UserName = "testuser", 
      RoleName = "user", 
      ApplicationName = "USERMANAGEMENT" 
     }); 

     return model; 
    } 

Der Benutzer existieren und haben die richtige Rolle, aber jedes Mal gibt 0. Hier ist die gespeicherte Prozedur von AspNet Mitgliedschaft:

ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_IsUserInRole] 
@ApplicationName nvarchar(256), 
@UserName   nvarchar(256), 
@RoleName   nvarchar(256) 

AS DECLARE BEGIN @ApplicationId unique SELECT @ApplicationId = NULL SELECT @ApplicationId = ApplicationId VON aspnet_Applications WHERE LOWER (@ApplicationName) = LoweredApplicationName IF (@ApplicationId IS NULL) RETURN (2) DECLARE @UserId unique SELECT @UserId = NULL DECLARE @RoleId unique 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) 

END

Wo ich mich irre? Irgendein Rat, wie man es repariert?

Ich brauche diese gespeicherte Prozedur zu überprüfen, ob der Benutzer in dieser Rolle ist, damit ich es für verwenden können [AuthorizeRoles („RoleTest“)]

Antwort

0

Das gespeicherte Prozedur keine Datensätze zurückgibt; es verwendet stattdessen den Rückgabewert. Dies muss als Parameter behandelt werden:

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

(auch auf your copy of this question on CodeProject geschrieben.)

+0

Vielen Dank. Das hat das Problem gelöst :) – Tozi