在使用C#ASP.NET MVC 4网站时遇到以下问题。
在我的代码中,我像这样调用Authorize函数:
private const string GROUP = "Administrators"; //The group that users have to apply to
[Authorize(Roles = GROUP)]
private string GenerateToken()
{
...
}
但是现在这个网站将被部署到多个位置,而const字符串GROUP也必须设置其他值。在此示例中,您只需更改值Administrators。但是我不希望其他用户打开代码文件并且有机会这样做。
所以我创建了一个xml解析器,并从设置xml中解析了这个值。但是我如何从变量设置常量。这是不可能的,因为常数是常数。但有办法吗?
我如何解析xml:
public class Settings
{
public string UserGroup { get; set; }
public Settings(String Loc)
{
Initialize(Loc);
}
private void Initialize(String Loc)
{
using (XmlReader reader = XmlReader.Create(new StringReader(GetXMLAsString(Loc))))
{
reader.ReadToFollowing("UserGroup");
UserGroup = reader.ReadElementContentAsString();
}
}
public string GetXMLAsString(String Loc)
{
XmlDocument doc = new XmlDocument();
doc.Load(Loc);
StringWriter sw = new StringWriter();
XmlTextWriter tx = new XmlTextWriter(sw);
doc.WriteTo(tx);
return sw.ToString();
}
这有可能实现:
private const string GROUP = settings.UserGroup;
答案 0 :(得分:0)
没有直接回答你的问题,但我通过两个"等级来解决这个问题。角色:
较低级别表示对资源的保护,并且是细粒度和特定于应用程序的。在您的情况下,角色可能是" CanGenerateToken"。用户永远不会直接成为这些角色的成员。
上层代表用户组(在企业中,这些用户通常是业务角色)。在这里,您可能拥有" MyAppAdministrators"等角色。这些角色是细粒度的低级角色的成员(例如" MyAppAdministrators"是" CanGenerateToken&#34的成员;)。
不幸的是,标准的ASP.NET RoleProvider不会以这种方式支持多个级别的角色(除非使用Windows组作为角色)。我已经实现了一个自定义的RoleProvider,它具有自己的管理UI。
使用这种方法,您的代码包含基于较低级别,细粒度角色的硬连线授权,这些角色很少发生变化:
[Authorize(Roles="CanGenerateToken")]
public void GenerateToken()
{
...
}
但是管理员可以灵活地映射更高级别的用户组"角色扮演这个角色。