[英]Restricting access for static class
作為學習過程的一部分,我正在使用.NET中的Remoting編寫簡單的IM應用程序。 截至目前,它是一個簡單的控制台應用程序,它按我的預期工作。 考慮下一個功能/特性,我陷入了以下代碼所代表的情況:
public static class UserManager {
public static started { get; private set; }
private static List<User> users;
static UserManager() {
users = List<User>();
started = true;
}
public static addUser(int _userID) {}
public static activateUser(int _userID) {
foreach (User u in users) {
if (u.userID == _userID) {
u.setActive();
break;
}
}
}
}
class User {
public int userID { get; private set; }
public bool active { get; private set; }
public User(int _userID) {
userID = _userID;
}
public void setActive() {
// only UserManager should be allowed to modify user state
}
}
我想只允許UserManager靜態類修改其用戶列表的狀態。 我當時在考慮“朋友”子句,但據我了解,C#中沒有這樣的構造。 僅檢查(在User類方法中)是否足夠,調用“對象”是否屬於UserManager類?
我將不勝感激任何輸入/建議,包括那些說“不要像您嘗試做的那樣做,最好使用它。”
PS。 不知道應該選擇哪個標題,如果更准確,可以隨意(經驗豐富的程序員/使用者)隨意更改。
您可以將UserManager
和User
類放在自己的程序集中,並將API的一部分標記為internal
(與VB的Friend
等效)。 這使您可以限制從該程序集外部進行訪問。
限制訪問的另一種方法是執行基於角色的安全性。 .NET為此具有PrincipalPermissionAttribute :
public static class UserManager
{
[PrincipalPermission(SecurityAction.Demand,
Role = "Administrators")]
public static void AddUser(int userId) { }
}
請注意,這僅在您知道用戶的角色時才起作用,但是在諸如用戶通常登錄的網站(ASP.NET WebForms / MVC)和Web服務(WCF)等方案中特別有用。
我能想到的真正限制對成員訪問的唯一選擇User
來UserManager
在編譯時有:
UserManager
為User
的嵌套類,並將成員設為私有 如果僅將成員設置為內部成員,則無論如何都會限制對程序集的訪問-是否不能使程序集足夠小以至於不能信任該程序集內編寫的代碼?
(只是一些友好的建議,我建議您查找Microsoft .NET命名約定-它會使您的代碼看起來更像慣用的C#。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.