我有一个调用的控制器方法Edit,用户可以编辑他们创建的数据,如此...
public ActionResult Edit(int id)
{
Submission submission = unit.SubmissionRepository.GetByID(id);
User user = unit.UserRepository.GetByUsername(User.Identity.Name);
//Make sure the submission belongs to the user
if (submission.UserID != user.UserID)
{
throw new SecurityException("Unauthorized access!");
}
//Carry out method
}
Run Code Online (Sandbox Code Playgroud)
这种方法工作正常,但是放入每个控制器的Edit方法都有点乱.每个表总是有一个,UserID所以我想知道是否有一种更简单的方法来通过[Authorize]属性或其他机制自动化这个代码更清洁.
我一直在对 Web api 上的身份验证和授权进行一些研究。我了解身份验证(用户名/密码)和基于角色的授权,但我感到困惑的是数据授权。
假设您有一个经过身份验证的用户(用户 ID 1),是一名管理员,并且与公司 ABC 关联。我有其他与 ABC 关联的用户,其用户 ID 1 可以更新。现在我想更新与 ABC 关联的用户 id 2 的名称(我也应该有权访问)。我需要传递一些内容来识别用户 2,即放入 /user/2 加上发布数据。我知道在服务器端,用户 1 可以更新用户 2,因为他已经过身份验证并且是管理员。
现在我有与公司 XYZ 关联的用户 100。用户 100 不应该能够更新用户 2。这就是我很难找到相关信息的原因。
有哪些方法/博客/任何内容可以就如何防止用户 100 访问其公司外部的数据提供一些有用的想法。
我的想法是,我可以将登录的用户 ID(我根据身份验证获取服务器端)传递到更新存储过程中,并进行检查以确保用户 ID 与正在更新的用户关联。对我来说,这似乎乏味且丑陋,因为每个存储过程都需要一个用户 id 参数和检查以确保他们可以访问他们正在访问的数据(也许这是正确的)。
我知道如何进行身份验证以及如何检查基于角色的授权,缺少的部分是基于资源的授权。
谢谢您的帮助。
有没有人有任何见解。很难相信基于角色的授权就足够了。