我需要在我的MVC 3项目中授权用户反对资源。以下列方式进行是一种好习惯吗?
interface IResource
{
string Id { get; set; }
bool Authorize(User user);
}
class User
{
// some logic for user
}
class ResourceA : IResource
{
public string Id { get; set; }
public ResourceA(string id)
{
Id = id;
}
bool Authorize(User user)
{
// Query database to check if user has permission to the resource
// return true if the user has, otherwise false
}
}
class TestController : Controller
{
// Get details of resource A
public ActionResult Get(User user, string resourceId)
{
IResource resource = new ResourceA(resourceId);
if (resource.Authorize(user))
{
// do stuff
}
else
{
throw HttpException(403, "No permission");
}
}
}
在上面的实现中:
网站的所有资源都被迫实施IResource接口。
与资源交互的所有请求都需要实现授权代码。
非常感谢任何帮助。
答案 0 :(得分:0)
解决方案看起来不错。如果您具有与资源相关的特定控制器和操作,您还可以使用ActionFilter,您可以在其中创建自定义逻辑,并在验证失败时进行检查和重定向。属性也是中央逻辑系统的一种方式。解决方案取决于用户如何与资源进行交互。