首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当用户只能访问父对象时,如何构造子对象的安全性

当用户只能访问父对象时,如何构造子对象的安全性
EN

Stack Overflow用户
提问于 2011-11-10 01:16:49
回答 2查看 67关注 0票数 0

我有一个类似于下面的数据库结构:

代码语言:javascript
运行
复制
User
----
Id
Name

UserCustomerLink
----------------
UserId
CustomerId

Customer
--------
Id
Name

Address
-------
Id
CustomerId
Address1

Invoice
-------
Id
AddressId
Number

这是一个asp.net mvc站点,用户可以转到像http://localhost/invoice/details/1这样的地址,它将返回id为1的发票。

用户需要登录并分配给发票(通过地址)所属的客户(通过UserCustomerLink表)。

我的问题是,我应该在哪里检查用户是否可以查看发票?

我应该检查发票是否存在,用户可以查看它,然后从数据库中返回它,或者我应该从数据库中检索项目,然后进行检查?

我关心的是为查找此信息而执行的数据库查询的数量,我正在寻找一种有效的方法。这是结构和一些子属性的简单化视图,深度超过3。

在网站笔记中,我首先使用的是实体框架代码,所以如果有一种方法可以创建一个在Invoice对象中包含客户Id的映射,那么就有可能绕过这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-10 22:59:49

没有理由两次访问数据库。您可以使用joins并执行一次select。所有的表都有链接记录的外键。当查询返回时,您检查用户是否链接到该发票。你可以用LINQ做同样的事情

代码语言:javascript
运行
复制
SELECT 
    i.*,
    c.Name
FROM 
    INVOICE i JOIN 
    Address a JOIN
        on i.addressId = a.id
    Customer c JOIN
        on a.customerID = c.id
    UserCustomerLink ucl join
        on c.id = ucl.CustomerId
    User u
        on ucl.Userid = User.id
WHERE 
    i.Id = @invoiceId
票数 0
EN

Stack Overflow用户

发布于 2011-11-10 03:15:28

查看Authorize属性。您可以将您的用户分配到角色中,然后让框架为您检查。

代码语言:javascript
运行
复制
[Authorize(Roles="AllowedUser")]
public ViewResult GetInvoies()
{
   return View();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8068856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档