我正在使用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”并在控制器中调用。
谢谢!
答案 0 :(得分:1)
在我看来,最简单的方法是将标准AuthorizeAttribute
与自定义RoleProvider
结合使用。 Google将向您展示如何实施自定义RoleProvider
- 至少您需要实施GetRolesForUser
和IsUserInRole
方法。
您的自定义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
检查用户的公司当前是否处于活动状态。