ASP.NET MVC自定义授权属性与存储过程

时间:2014-02-13 17:25:35

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在使用ASP.NET MVC构建一个Web应用程序,它有两种非常不同类型的用户。管理员,系统和用户的完全访问权限,但用户需要验证日期。这是用户按日期(开始和结束)的“许可证”。

我正在使用内置的ASP.NET授权,我正考虑将用户存储在UsersProfile(WebMatrix)中并为公司添加表,以创建许可证。我把这个程序称为:

CREATE PROCEDURE [dbo].[Sp_CompaniesIsActive]

@IsActive BIT OUTPUT

AS
BEGIN

DECLARE @DateNow DATETIME SET @DateNow = GETDATE()
IF EXISTS (
SELECT Result=CAST(
CASE WHEN EXISTS(
    SELECT C.[Id], C.[Start], C.[End], U.[CompaniesId], U.[UserId]
    FROM Companies AS C INNER JOIN UserProfile AS U
    ON U.CompaniesId = C.Id
    WHERE
    CONVERT(DATETIME, CONVERT(VARCHAR(10), [End], 102)) > CONVERT(DATETIME, CONVERT(VARCHAR(10), @DateNow, 102))
)
THEN 1 ELSE 0 END AS BIT)
)

SET @IsActive=1
Else
SET @IsActive=0
End

我需要帮助来创建“公共类AuthorizeUserAttribute:AuthorizeAttribute”并在控制器中调用。

谢谢!

1 个答案:

答案 0 :(得分:1)

在我看来,最简单的方法是将标准AuthorizeAttribute与自定义RoleProvider结合使用。 Google将向您展示如何实施自定义RoleProvider - 至少您需要实施GetRolesForUserIsUserInRole方法。

您的自定义RoleProvider可以返回包含您的标准角色(管理员,用户)的角色列表以及仅在用户当前获得许可时才会返回的角色(例如“LicensedUser”)。

  

我仍然不明白我将如何实施特定角色的检查。

“GetRolesForUser”方法的基础知识可能如下所示:

public string[] GetRolesForUser(string userName)
{
    // Get "standard" roles (User, Admin) ...
    List<string> roles = GetStandardRolesForUser(string userName);

    if (IsUsersCompanyActive(userName))
    {
        roles.Add("LicensedUser");
    }
    return roles.ToArray();
}

此处GetStandardRolesForUser可以从您存储的任何位置获取用户,管理员角色。 IsUsersCompanyActive检查用户的公司当前是否处于活动状态。