加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.net角色和项目

发布时间:2020-12-16 06:57:05 所属栏目:asp.Net 来源:网络整理
导读:编辑 – 重写我原来的问题,以提供更多信息 背景信息 在我的工作中,我正在为我们的客户开发ASP.Net Web应用程序.在我们的实现中,我们使用诸如Forms身份验证与MembershipProviders和RoleProviders之类的技术.一切顺利,直到我遇到配置角色的一些困难,因为角色不
编辑 – 重写我原来的问题,以提供更多信息

背景信息
在我的工作中,我正在为我们的客户开发ASP.Net Web应用程序.在我们的实现中,我们使用诸如Forms身份验证与MembershipProviders和RoleProviders之类的技术.一切顺利,直到我遇到配置角色的一些困难,因为角色不是系统范围的,而是与客户帐户和项目相关.

我无法确定我们的确切设置/配方,因为我认为我们公司不会批准……

什么是客户/项目?
我们公司每年(或其他间隔)为客户提供管理信息.
在我们的系统中,客户/合同包括:

>一个帐户:有关公司的信息
>每个帐户,一个或多个产品:我们将提供的管理信息包
>每个产品,一个或多个测量:一段时间,我们收集并报告数据

外联网站点设置
最终,我们希望所有客户都能够通过我们的在线系统访问他们的管理信息.外联网由两个站点组成:

>公司站点:提供帐户信息和产品的概述
>测量地点:选择测量后,详细了解该段时间

测量站点是外联网中最有趣的部分.我们将为新的概述,报告,管理和维护对研究重要的资源创建子模块.

我们的Visual Studio解决方案包含许多项目.一个名为Portal的Web应用程序作为基础.站点和模块是该应用程序中的虚拟目录(使得在事物之间共享MasterPages更容易).

什么样的角色?
以下用户(读取:角色)将使用该系统:

>管理员:开发用户:)(不是客户相关的,完全访问权限)
>员工:我们公司的员工(不是客户相关,完全访问)
>客户超级用户:顶级经理(完全访问他们的帐户/度量)
>客户联系人:主要联系人(完全访问他们的测量)
>客户经理:部门经理(访问受限,测量的具体数据)

ASP.Net用户怎么样?
该系统将拥有许多ASP.Net用户,让我们关注客户用户:

>帐户之间不共享用户
> SuperUser X可自动访问所有(和新的)测量值
>用户Y可以是测量1的主要联系人,但对于测量2没有任何作用
>用户Y可以是测量1的主要联系人,但具有测量2的管理员角色
>部门经理是许多个人用户(每个测量),如果经理Z登录了测量1,我们希望再次使用该登录,如果他参与测量2.

网址结构
这些是我们应用程序中的典型URL:

> http://host/login – 登录界面
> http://host/project – 帐户/产品概览屏幕(测量选择)
> http://host/project/1000 – 测量(id:1000)详情
> http://host/project/1000/planning – 计划概述(主要联系人/超级用户)
> http://host/project/1000/reports – 报告下载(经理部门X只能访问报告X)

我们还将创建一个文档URL,您可以通过它的GUID请求特定文档.系统必须检查用户是否拥有该文档的权限.该文档与度量相关,用户或特定角色对文档具有特定权限.

有什么问题? (最后;))
角色不足以确定允许用户查看/访问/下载特定项目的内容.仅仅说管理者可以访问某个导航项是不够的.当用户请求Measurement 1000时,我们必须检查用户不仅具有Manager角色,还具有Measurement 1000的Manager角色.

总结如下:

>我们如何限制用户的帐户/度量?
(记得超级用户看到所有测量值,有些经理只能进行具体测量)
>我们如何在产品/测量级别应用角色?
(用户X可以是测量1的主要接触,但只是测量2的管理者)
>我们如何限制经理访问报告屏幕并仅限制其部门的报告?

所有这些都具有asp.net类的神奇功能,可能还有自定义的roleprovider实现.

类似Stackoverflow问题/问题
ASP.NET,how to manage users with different types of roles

解决方法

您从我看到的各种帖子中寻求的是自定义角色机制或另一种方式,即自定义授权机制.身份验证仍然可以使用标准的SqlMembershipProvider.

我不确定标准角色提供程序是否会为您提供所需的权限,因为授权要求您具有项目的上下文.但是,您可能会调查编写自定义RoleProvider以查看是否可以创建一些自定义方法来执行此操作.尽管如此,为了回答这个问题,我假设你不能使用SqlRoleProvider.

所以,这是一些潜在的架构:

Create Table Companies
(
    Id int not null Primary Key,...
)
Create Table Projects
(
    Id int not null Primary Key,PrimaryContactUserId uniqueidentifier,...,Constraint FK_Projects_aspnet_Users
        Foreign Key ( PrimaryContactUserId )
        References dbo.aspnet_Users ( UserId )
)
Create Table Roles
(
    Name nvarchar(100) not null Primary Key,...
)

Create Table ProjectCompanyRoles
(
    CompanyId int not null,ProjectId int not null,RoleName nvarchar(100) not null,Constraint FK_...
)

正如我之前所说,在Projects表中包含PrimaryContact的原因是为了确保给定项目只有一个.如果将其作为角色包含在内,则必须包含一堆箍跳代码,以确保项目未分配多个PrimaryContact.如果是这种情况,那么从Projects表中取出PrimaryContactUserId并使其成为一个角色.

授权检查需要对ProjectCompanyRoles进??行查询.同样,Project和Company的上下文的添加使得使用默认角色提供程序成为问题.如果要将.NET机制用于角色和身份验证,则必须实现自己的自定义RoleProvider.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读