为什么要在 Asp.net MVC 中创建自定义主体时创建自定义主体接口?
Why to create a custom principal interface when you want to create a Custom Principal in Asp.net MVC?
最近我搜索了如何创建自定义主体并得到了答案,但有一件事我不明白,我在堆栈溢出上找到了这个解决方案
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Principal;
namespace workflow.Authorize
{
interface ICustomPrincipal : IPrincipal
{
int Id { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
}
public class CustomPrincipal : ICustomPrincipal
{
public IIdentity Identity { get; private set; }
public bool IsInRole(string role) {
if(this.Roles.Contains(role))
return true;
else
return false;
}
public CustomPrincipal(string email)
{
this.Identity = new GenericIdentity(email);
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Roles { get; set; }
}
public class CustomPrincipalSerializeModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Roles { get; set; }
}
}
但我不明白的是为什么开发者创建了 ICustomPrincipal 接口并强制 CustomPrincipal 继承它 为什么 CustomPrincipal class 直接继承自 IPrincipal 接口
对我来说,如果你需要强制用户覆盖额外的属性和方法,那么你必须创建一个自定义界面。
开发人员创建了自定义界面并添加了新属性,例如 FirstName 属性 和 LastName 属性 强制你应用它们。
看here你会发现Iprincipal接口唯一的属性是identity 属性而不能够你用了
我希望这能帮助您理解为什么开发人员有时会创建一些自定义界面。
最近我搜索了如何创建自定义主体并得到了答案,但有一件事我不明白,我在堆栈溢出上找到了这个解决方案
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Security.Principal;
namespace workflow.Authorize
{
interface ICustomPrincipal : IPrincipal
{
int Id { get; set; }
string FirstName { get; set; }
string LastName { get; set; }
}
public class CustomPrincipal : ICustomPrincipal
{
public IIdentity Identity { get; private set; }
public bool IsInRole(string role) {
if(this.Roles.Contains(role))
return true;
else
return false;
}
public CustomPrincipal(string email)
{
this.Identity = new GenericIdentity(email);
}
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Roles { get; set; }
}
public class CustomPrincipalSerializeModel
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Roles { get; set; }
}
}
但我不明白的是为什么开发者创建了 ICustomPrincipal 接口并强制 CustomPrincipal 继承它 为什么 CustomPrincipal class 直接继承自 IPrincipal 接口
对我来说,如果你需要强制用户覆盖额外的属性和方法,那么你必须创建一个自定义界面。
开发人员创建了自定义界面并添加了新属性,例如 FirstName 属性 和 LastName 属性 强制你应用它们。
看here你会发现Iprincipal接口唯一的属性是identity 属性而不能够你用了
我希望这能帮助您理解为什么开发人员有时会创建一些自定义界面。